Jquery和純JS實現輪播圖(一)--左右切換式
阿新 • • 發佈:2019-01-10
var cur = 0, //當前的圖片序號
imgLis = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //獲取圖片組
imgLen = imgLis.length, //獲取圖片的數量
timer = null; //設定定時定時器的名字,方便後面關閉
dollLis = getElementsByClassName("dollList")[0].getElementsByTagName("li"); //獲取下方圓點
//封裝圖片自動播放函式
function changeImg(){
timer = setInterval(function(){
if(cur < imgLen -1){
cur ++;
}else{
cur = 0;
}
//呼叫變換處理函式
changeTo(cur);
},2500);
}
changeImg();
//呼叫新增事件處理
addEvent();
//給左右箭頭和右下角的圖片index新增事件處理
function addEvent(){
for (var i=0;i<imgLen;i++){
//閉包防止作用域內活動物件item的影響
(function(_i){
//滑鼠滑過則清除定時器,並作變換處理
dollLis[_i].onmouseover = function(){
clearTimeout(timer);
changeTo(_i);
cur = _i;
};
//滑鼠滑出則重置定時器處理
dollLis[_i].onmouseout = function(){
changeImg();
};
})(i);
}
//給左箭頭prev新增上一個事件
var pre = getElementsByClassName("pre")[0];
pre.onmouseover = function(){
//滑入清除定時器
clearIntervcural(timer);
};
pre.onclick = function(){
//根據curIndex進行上一個圖片處理
cur = (cur > 0) ? (--cur) : (imgLen - 1);
changeTo(cur);
};
pre.onmouseout = function(){
//滑出則重置定時器
changeImg();
};
//給右箭頭next新增下一個事件
var next = getElementsByClassName("next")[0];
next.onmouseover = function(){
clearInterval(timercur);
};
next.onclick = function(){
cur = (cur < imgLen - 1) ? (++cur) : 0;
changeTo(cur);
};
next.onmouseout = function(){
changeImg();
};
}
//左右切換處理函式
function changeTo(num){
//設定image
var imgList = getElementsByClassName("imgList")[0];
goLeft(imgList,num*800); //左移一定距離
//設定image的控制下標 index
var _curIndex = getElementsByClassName("sec")[0];
removeClass(_curIndex,"sec");
addClass(dollLis[num],"sec");
}
//圖片組相對原始左移dist px距離
function goLeft(elem,dist){
if(dist == 800){ //第一次時設定left為0px 或者直接使用內嵌法 style="left:0;"
elem.style.left = "0px";
}
var toLeft; //判斷圖片移動方向是否為左
dist = dist + parseInt(elem.style.left); //圖片組相對當前移動距離
if(dist<0){
toLeft = false;
dist = Math.abs(dist);
}else{
toLeft = true;
}
for(var i=0;i<= dist/20;i++){ //這裡設定緩慢移動,10階每階80px
(function(_i){
var pos = parseInt(elem.style.left); //獲取當前left
setTimeout(function(){
pos += (toLeft)? -(_i * 20) : (_i * 20); //根據toLeft值指定圖片組位置改變
//console.log(pos);
elem.style.left = pos + "px";
},_i * 25); //每階間隔50毫秒
})(i);
}
}