页面加载、获取整个容器、所有放数字索引的li及放图片列表的ul、定义放定时器的变量、存放当前索引的变量index
二、添加定时器,每隔2秒钟index递增一次、调用一次切换图片函数
提示:
1、 index不能一直无限制的递增下去,需做判断
2、调用切换图片函数时需将递增之后的index作为参数传过去
三、定义图片切换函数
提示:
1.遍历所有放数字索引的li,将每个li上的类去掉。
2.根据传递过来的index值找到对应的li给它添加类设为当前高亮显示。
3. 根据传递过来的index值计算放图片的ul的top值
4. 改变index的值,让其等于传递过来的参数值
注意:放图片的ul的top值=-index*单张图片的高度(所有图片必须等高)
四、鼠标划过整个容器时,图片停止切换,离开继续
提示:
- 鼠标滑过整个容器时清除定时器
- 鼠标离开时继续执行定时器,切换至下一张图片
五、遍历所有放数字的li,且给他们添加索引、鼠标滑过时切换至对应的图片。
鼠标滑过时调用图片切换函数,将滑过的li的索引传过去。
具体代码如下:
var tab = {
index:0,
init:function(options){
this.initData(options);
this.render();
this.autoMove(++ this.index);
this.handle();
},
initData : function(options){
this.el = options.el;
this.oList = this.el.getElementsByClassName('list')[0];
this.list = options.list;
console.log(this.list);
},
render : function(){
let html = '';
for(let i = 0; i < this.list.length; i++){
let item = this.list[i];
html += `<li class="item ${i === this.index ? 'active' : ''}">
<span class="title">${item.title}</span>
${item.desc}
</li>`;
}
this.oList.innerHTML = html;
},
autoMove : function(i){
this.timer = setTimeout(() => {
this.changePic(i);
this.autoMove(this.getIndex(++ this.index));
},1000);
},
changePic:function(i){
let oItem = this.oList.getElementsByClassName('item')[i];
let oActive = this.oList.getElementsByClassName('active')[0];
let oMain = this.el.getElementsByClassName('main')[0];
oActive.classList.remove('active');
oItem.classList.add('active');
oMain.style.backgroundColor = this.list[i].color;
oMain.style.backgroundImage = `url(${this.list[i].poster})`;
},
getIndex : function(index){
var minIndex = 0;
maxIndex = this.list.length - 1;
if(index > maxIndex){
this.index = minIndex;
return minIndex;
}
return index;
},
handle : function(){
this.handleEnter();
this.handleLeave();
},
handleEnter : function(){
var oItemList = this.oList.getElementsByClassName('item');
var self = this;
for(let i = 0; i < this.list.length; i++){
oItemList[i].onmouseenter = function(){
clearTimeout(self.timer);
self.changePic(i);
self.index = i;
}
}
},
handleLeave:function(){
this.oList.onmouseleave = () => {
this.autoMove(this.getIndex(++ this.index));
}
}
}
tab.init({
el : document.getElementsByClassName('app')[0],
list : data
});
这是 html 中的代码 布局1 仅供参考!!!!