js实现轮播图

2021-07-07  本文已影响0人  圆滚滚大煤球

1、动态获取小圆圈。

// 动态获取小圆圈
// 1、循环img_box的li,创建li,添加到circle里面
var img_box = document.querySelector('.img_box');
var lis = img_box.querySelectorAll('li');//图片
var circle = document.querySelector('.circle')
console.log(lis);
for(var i = 0; i < lis.length; i++) {
    var btns = document.createElement('li');//创建小圆圈按钮
    circle.appendChild(btns);//添加到circle里 父前子后
    // 第一个小圆圈添加样式;
    circle.children[0].className = 'current';
}

2、点击小圆圈切换样式。

  // 点击小圆圈 切换样式;
  btns.addEventListener('click',function() {
      // 获取小圆圈
      var cir_btns = circle.querySelectorAll('li');
      // 循环删除所有小圆圈的样式;
      for(var i = 0; i < cir_btns.length; i++) {
          cir_btns[i].className = '';
          cir_btns[i].index = i ;
      }
      //留下自己;
      this.className = 'current';
      // 获取点击的按钮索引号
      var index = this.index;

  })

3、点击小圆圈切换到对应的图片。

        // 切换到对应的图片
        // 调用animate函数,写入两个值:要移动的盒子,距离
        animate(img_box, -index * 400);

4、鼠标经过图片盒子左右按钮显示,离开消失。

// 鼠标经过图片盒子,左右箭头出现,离开消失;
var box = document.querySelector('.box');
var arrow_r = document.querySelector('.arrow_r')
var arrow_l = document.querySelector('.arrow_l')
box.addEventListener('mouseenter',function() {
    arrow_l.style.display = 'block';
    arrow_r.style.display = 'block';
    clearInterval(timer);
});
box.addEventListener('mouseleave',function() {
    arrow_l.style.display = 'none';
    arrow_r.style.display = 'none';
    autoPlay();
})

5、点击右按钮,显示下一张图片,对应小圆圈切换样式。

// 点击右箭头,滑动到下一张图片;
var num = 0;
var circle_btns = 0;
arrow_r.addEventListener('click',function() {
    num++;
    // 当num大于当前图片数量,则返回0,盒子距离也返回0,第一张;
        if(num >= 3) {
        num = 0;
        img_box.style.left = 0;
    }
    console.log(num);
    circle_btns++;
  // 当 circle_btns大于当前按钮数量,则返回0,第一张;
    if(circle_btns > 2) {
        circle_btns = 0;
    }
    console.log(circle_btns);
    // 图片盒子移动
    animate(img_box,- num * 400);
    circlestyle();
})

// 对应小圆圈添加样式 其他清除样式;
// 封装一个函数;
function circlestyle() {
    for(var i = 0; i < circle.children.length; i++) {
        circle.children[i].className = '';
    }
    //留下自己;
    circle.children[circle_btns].className = 'current';
}

6、当滑动到num=3时,因为没有图片所以会露出背景色的bug,解决方法:动态克隆第一张图片添加到图片盒子里;

// 获取元素
var imgone = img_box.children[0].cloneNode(true);
img_box.appendChild(imgone);

7、点击左按钮,显示上一张图片,对应小圆圈切换样式。

// 点击左箭头,滑动到上一张图片;
arrow_l.addEventListener('click',function() {
    num--;
    // 当num大于当前图片数量,则返回0,第一张;
    if(num < 0) {
        num = 2;
        animate(img_box,-1600);
    }
    circle_btns--;
    if(circle_btns < 0) {
        circle_btns = 2;
    }
    console.log(circle_btns);
    // 图片盒子移动
    animate(img_box,- num * 400);
    circlestyle();
})

8、开启计时器,自定点击右按钮。
(在mouseenter里清除定时器,在mouseleave中开启定时器;)

// 开启定时器,自动点击右箭头;
var timer = null;
function autoPlay(){
    timer = setInterval(function() {
        arrow_r.click();
    },2000);
}
autoPlay();

CSS

* {
    padding: 0;
    margin: 0;
    text-decoration: none;
    list-style: none;
}



.box {
    position: relative;
    margin: 100px auto;
    width: 400px;
    height: 300px;
    background-color: darkred;
    overflow: hidden;
}

.box .img_box {
    position: absolute;
    left: 0;
    top: 0;
    width: 1600px;
    height: 100%;
    z-index: 1;
}

.img_box li>img {
    float: left;
    width: 400px;
    height: 300px;
    object-fit: cover;
}
.circle {
    position: absolute;
    bottom: 20px;
    left: 40%;
    z-index: 2;
}
.circle>li {
    float: left;
    margin-right: 6px;
    width: 14px;
    height: 14px;
    border: 2px #fff solid;
    border-radius: 50%;
    cursor: pointer;
}
.circle .current {
    background-color: #fff;
}
.arrow_l,
.arrow_r {
    position: absolute;
    top: 40%;
    display: none;
    width: 30px;
    background-color: rgba(255, 255, 255, .3);
    z-index: 3;
    color: #fff;
}
.arrow_r {
    right: 0;
}
.icon-ctrl1,.icon-ctrl2 {
    font-size: 30px;
}
.icon-ctrl1:hover {
    color: red;
}
.icon-ctrl2:hover {
    color: red;
}

HTML

 <!-- 大盒子套三个小盒子,分别是图片盒子,圆圈按钮盒子,左右箭头盒子 -->
    <div class="box">
        <ul class="img_box">
            <li>
                <img src="./images/3.jpg" alt="">
            </li>
            <li>
                <img src="./images/4.jpg" alt="">
            </li>
            <li>
                <img src="./images/5.png" alt="">
            </li>
        </ul>
        <!-- 小圆圈按钮 -->
        <ol class="circle">
        </ol>
        <!-- 左右箭头 -->
        <a href="JavaScript:;" class="arrow_l">
            <span class="icon-ctrl1"></span>
        </a>
        <a href="JavaScript:;" class="arrow_r">
            <span class="icon-ctrl2"></span>
        </a>
    </div>
</body>
<script src="./animate.js"></script>
<script src="./index.js"></script>
上一篇下一篇

猜你喜欢

热点阅读