JS轮播图demo

105 阅读2分钟

效果

需求

需求
1.鼠标移上去轮播停止,移除轮播继续onmousemove:事件会在鼠标指针移动到指定的对象上时发生。onmouseout:事件会在鼠标指针移出指定的对象时发生
2.点击按钮可以左右切换通过绑定点击事件并且利用清除添加active的方法(即索引与class的联系)
3.自动轮播效果计时器
4.点击小圆点达到指定图片跳转的效果在html标签中添加的自定义属性,如果想要获取这个属性的值,需要使用getAttribute("自定义属性的名字,eg:data-index") 才能获取这个属性的值;还有 this指向 的知识

这个是点击按钮时的逻辑思路: 微信图片_20231125164134.jpg

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="lb.css">
</head>
<body>
    <!-- 轮播图主体 -->
    <div class="wrap">
    <!--图片list-->
        <ul class="list">
            <li class="item active"><img src="./wrap/1.jpg"></li>
            <li class="item"><img src="./wrap/2.jpg"></li>
            <li class="item"><img src="./wrap/3.jpg"></li>
            <li class="item"><img src="./wrap/4.jpg"></li>
        </ul>
    <!-- 对应的下面的小圆点 -->
        <ul class="pointList">
            <li class="point active" data-index = 0></li>
            <li class="point" data-index = 1></li>
            <li class="point" data-index = 2></li>
            <li class="point" data-index = 3></li>
        </ul>
        <!-- 左右两个按钮 -->
        <button class="btn" id="leftBtn"> < </button> 
        <button class="btn" id="rightBtn"> > </button>
 
    </div>



    <script>
        //获取元素
        //图片
        var items = document.querySelectorAll(".item");
        //点
        var points = document.querySelectorAll(".point")
        //按钮
        var left = document.getElementById("leftBtn");
        var right = document.getElementById("rightBtn");
        //整体
        var all = document.querySelector(".wrap")
        var index = 0;//初始为第一张照片
        var time = 0;//定时器跳转参数初始化
        
 
        //封装一个清除active方法
        var clearActive = function () {
            for (i = 0; i < items.length; i++) {
                items[i].className = 'item';
            }
            for (j = 0; j < points.length; j++) {
                points[j].className = 'point';
            }
        }
 
        //改变active方法
        var goIndex = function () {
            clearActive();
            items[index].className = 'item active';
            points[index].className = 'point active'
        }
        //左按钮事件
        var goLeft = function () {
            if (index == 0) {
                index = 3;
            } else {
                index--;
            }
            goIndex();
        }
 
        //右按钮事件
        var goRight = function () {
            if (index < 3) {
                index++;
            } else {
                index = 0;
            }
            goIndex();
        }
        
 
        //绑定点击事件监听
        left.addEventListener('click', function () {
            goLeft();
            time = 0;//计时器跳转清零
        })
 
        right.addEventListener('click', function () {
            goRight();
            time = 0;//计时器跳转清零
        })
 //————————————————————————————————————————————————————————————————————————————————
 //点击小圆点也能实现跟点击左右按钮一样的效果,不过这个不是index的加加减减
 //而是直接指定某index对应的确定的某张图片
        for(i = 0;i < points.length;i++){
            points[i].addEventListener('click',function(){
                var pointIndex = this.getAttribute('data-index')
                index = pointIndex;
                goIndex();
                time = 0;//计时器跳转清零
            })
        }
        //计时器轮播效果
        //定义timer变量 就是这个控制自动轮播的计时器,后续给这个timer绑定上计时器(用一个play函数包起来)
        var timer;
        function play(){
         timer = setInterval(() => {
            time ++;
            if(time == 20 ){
                goRight();
                time = 0;
            }    
        },100)
    }
        play();
        
        
        //移入清除计时器
        //也就是当鼠标在图上的时候,图片不自动轮播,停在这一页
        all.onmousemove = function(){
            clearInterval(timer)
        }
       //移出启动计时器
       //当鼠标离开图上时,图片继续轮播
        all.onmouseleave = function(){
            play();
        }
    </script>

</body>
</html>