1. 程式人生 > >js實現輪播

js實現輪播

代碼 time js實現 head style 鼠標移動 meta getattr 定時器

思路:
1、首先要有個盛放圖片的容器,設置為單幅圖片的寬高,且overflow:hidden,這樣保證每次可以只顯示一個圖片
2、container內有個放圖片的list進行position的定位 ,其中的圖片采用float的方式,同時當圖片進行輪播時,改變list的Left值使得其顯示的圖片發生變化。
3、圖片的輪播使用定時器,通過定時器改變list的Left值是的圖片循環展示
4、當鼠標滑動到圖片上時,清除定時器,圖片停止輪播,當鼠標移出時繼續進行輪播
5、圖片上有一組小圓點用於與當前顯示的圖片相對應,同時可以通過點擊的方式查看對應的圖片
6、圖片可以通過點擊pre,next進行左右滑動顯示

代碼:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>輪播圖</title>
<style type="text/css">
.container{
margin:0 auto;
width:600px;
height:400px;
position: relative;
overflow: hidden;

border:4px solid gray;
box-shadow: 3px 3px 5px gray;
border-radius:10px;
}
.list{
width:4200px;
height:400px;
position: absolute;
top:0px;
}
img{
float:left;
width:600px;
height:400px;
}
.dots{
position: absolute;
left:40%;
bottom:30px;
list-style: none;
}
.dots li{
float:left;
width:8px;
height:8px;
border-radius: 50%;
background: gray;
margin-left:5px
}
.dots .active{
background: white;
}
.pre,.next{
position: absolute;
top:40%;
font-size:40px;
color:white;
text-align:center;
background: rgba(128,128,128,0.5);
display:none;
}
.pre{
left:30px;
}
.next{
right:30px;
}
</style>
</head>
<body>
<div class="container">
<div class="list" style=" left:-600px;">
<img src="img/5.jpg">
<img src="img/1.jpg">
<img src="img/2.jpg">
<img src="img/3.jpg">
<img src="img/4.jpg">
<img src="img/5.jpg">
<img src="img/1.jpg">
</div>
<ul class="dots">
<li index=1 class="active dot"></li>
<li index=2 class="dot"></li>
<li index=3 class="dot"></li>
<li index=4 class="dot"></li>
<li index=5 class="dot"></li>
</ul>
<div class="pre"><</div>
<div class="next">></div>
</div>
<script type="text/javascript">
var index=1,timer;

window.onload = init;
/*初始化函數*/
function init(){
eventBind();
autoPlay();
}
/*自動輪播*/
function autoPlay(){
timer =setInterval(function () {
animation(-600);
dotIndex(true);
},1000)
}
/*停止輪播*/
function stopAutoPlay() {
clearInterval(timer);
}
/*改變dot的顯示*/
function dotIndex(add){
if(add){
index++;
}
else{
index--;
}
if(index>5){
index = 1;
}
if(index<1){
index = 5;
}
dotActive();
}
function dotActive() {
var dots = document.getElementsByClassName("dot");
var len = dots.length;
for(var i=0 ;i<len ;i++){
dots[i].className = "dot";
}

for(var i=0;i<len;i++){
/*此處可以不用parseInt,當不用全等時*/
if(index === parseInt(dots[i].getAttribute("index"))){
dots[i].className = "dot active";
}
}
}

/*初始化事件綁定*/
function eventBind(){
/*點的點擊事件*/
var dots = document.getElementsByClassName("dot");
var len = dots.length;
for(var i=0;i<len;i++){
(function(j){
dots[j].onclick = function(e){
var ind = parseInt(dots[j].getAttribute("index"));
animation((index - ind)*(-600));/*顯示點擊的圖片*/
index = ind;
dotActive();
}
})(i)
}
/*容器的hover事件*/
var con = document.getElementsByClassName("container")[0];
/*鼠標移動到容器上時,停止制動滑動,離開時繼續滾動*/
con.onmouseover = function (e) {
stopAutoPlay();
document.getElementsByClassName("pre")[0].style.display = "block";
document.getElementsByClassName("next")[0].style.display = "block";
}
con.onmouseout =function(e){
autoPlay();
document.getElementsByClassName("pre")[0].style.display = "none";
document.getElementsByClassName("next")[0].style.display = "none";
}
/*箭頭事件的綁定*/
var pre = document.getElementsByClassName("pre")[0];
var next = document.getElementsByClassName("next")[0];
pre.onclick = function (e) {
dotIndex(false);
animation(600);
}
next.onclick = function (e) {
dotIndex(true);
animation(-600);
}
}
/*list容器的偏移量是圖片輪播*/
function animation(offset){
var lists = document.getElementsByClassName("list")[0];
var left = parseInt(lists.style.left.slice(0,lists.style.left.indexOf("p"))) + offset;
if(left<-3000){
lists.style.left = "-600px";
}
else if(left>-600){
lists.style.left = "-3000px";
}
else{
lists.style.left = left+"px";
}
}

</script>
</body>
</html>

js實現輪播