美文网首页
index.js(无缝滚动)

index.js(无缝滚动)

作者: 王远清orz | 来源:发表于2019-11-28 16:28 被阅读0次
// 获取元素
var box = my$('box');
var screen = box.children[0];
var ul = screen.children[0];
var ol = screen.children[1];
var arr = my$('arr');
var arrLeft = my$('left');
var arrRight = my$('right');
var imgWidth = screen.offsetWidth;
// 1.动态生成序号
var count = ul.children.length;
for (var i = 0; i < count; i++) {
  var li = document.createElement('li');
  ol.appendChild(li);
  setInnerText(li, i + 1);
  // 让当前li记录它的索引
  //设置标签自定义属性
  li.setAttribute('index', i);
  // 让序列1高亮显示
  if (i === 0) {
    li.classList.add('current');
  }
  // 2.点击序号,滚动到序号对应的图片
  li.onclick = liClick; //事件在循环中调用,避免内存重复调用,改为函数调用
}

// ol中li点击事件
function liClick() {
  // 2.1让ol里面的li取消高亮显示,让当前点击的li高亮显示
  for (var i = 0; i < ol.children.length; i++) {
    var li = ol.children[i];
    li.classList.remove('current');
  }
  this.classList.add('current'); //this指向事件源 li
  // 2.2让图片滚动到当前对应的位置
  //获取图片宽度

  // 获取当前li的索引值
  var liIndex = parseInt(this.getAttribute('index')); // 这里要把字符串类型转成睡着类型
  index = liIndex; //同步图片与ol中索引值
  animate(ul, -liIndex * imgWidth);
}

// 3.鼠标放入盒子里面,自动显示上一张,下一张
box.onmouseenter = function() {
  arr.style.display = 'block';
  // 鼠标移入停止定时器
  clearInterval(timeId);
};
box.onmouseleave = function() {
  arr.style.display = 'none';
  //鼠标移出开始定时器
  timeId = setInterval(function() {
    arrRight.click();
  }, 2000);
};

// 4.点击上一张,下一章,图片对应切换
var index = 0; //第一张图片的索引

// 克隆li  cloneNode()  复制节点
// 参数  true  复制节点中的内容
//       false  只复制当前节点,不复制里面的内容
var liClone = ul.children[0].cloneNode(true); //克隆ul中第一张图片
ul.appendChild(liClone);
// ;
arrRight.onclick = function() {
  // 判断是否是克隆的第一张图片,如果是克隆的第一张图片,此时修改ul的坐标,显示真正的第一张图片
  if (index === count) {
    index = 0;
    ul.style.left = '0px';
  }
  // 总共有5张图片,但是还有一张克隆的图片  克隆的图片的索引是5
  // 4 < 5
  index++;
  if (index < count) {
    ol.children[index].click(); // 获取图片对应的序号,让序号点击
  } else {
    //如果是最后一张图片 以动画的方式,移动到克隆的第一张图片
    animate(ul, -index * imgWidth);
    // 取消所有序号的高亮显示,让第一序号高亮显示
    for (var i = 0; i < ol.children.length; i++) {
      var li = ol.children[i];
      li.classList.remove('current');
      if (i === 0) {
        li.classList.add('current');
      }
    }
  }
};
// 点击上一张
arrLeft.onclick = function() {
  // 如果当前是第一张图片,此时要偷偷的切换到最后一张图片的位置(克隆的第一张图片)
  if (index === 0) {
    index = count;
    ul.style.left = -index * imgWidth + 'px';
  }
  index--;
  ol.children[index].click();
};

// 5.自动播放
var timeId = setInterval(function() {
  arrRight.click();
}, 2000);

相关文章

网友评论

      本文标题:index.js(无缝滚动)

      本文链接:https://www.haomeiwen.com/subject/okbbwctx.html