js原生实现滚动式轮播图

HTML部分

<body>
    <div id="banner">
        <ul id="imglist">
            <li>
                <a href=""><img src="image/01.jpg" alt=""></a>
            </li>
            <li>
                <a href=""><img src="image/02.jpg" alt=""></a>
            </li>
            <li>
                <a href=""><img src="image/03.jpg" alt=""></a>
            </li>
            <li>
                <a href=""><img src="image/04.jpg" alt=""></a>
            </li>
            <li>
                <a href=""><img src="image/01.jpg" alt=""></a>
            </li>
        </ul>
        <ul id="iconlist">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
    </div>
</body>

  

CSS部分
   

 <style>
        * {
            padding: 0px;
            margin: 0px;
            list-style: none;
            text-decoration: none;
        }
        
        #banner {
            position: relative;
            width: 1280px;
            height: 600px;
            overflow: hidden;
            border: 2px solid red;
        }
        
        #imglist {
            width: 7680px;
            height: 600px;
        }
        
        #imglist>li {
            float: left;
            width: 1280px;
            height: 600px;
        }
        
        #imglist>li img {
            width: 100%;
            height: 100%;
        }
        
        #iconlist {
            position: absolute;
            display: flex;
            justify-content: center;
            align-items: center;
            width: 100%;
            height: 50px;
            bottom: 0px;
            left: 0px;
        }
        
        #iconlist li {
            display: flex;
            justify-content: center;
            align-items: center;
            width: 30px;
            height: 30px;
            background-color: #fff;
            border-radius: 50%;
            margin: 0px 20px;
            cursor: pointer;
        }
    </style>

 

JS部分
<script>
    // 获取图片标签
    var imgs = document.getElementById("imglist").getElementsByTagName("li");
    // 获取列表
    var icons = document.getElementById("iconlist").getElementsByTagName("li");
    // 初始化图片的位置
    var left = 0;
    imglist.style.marginLeft = left + "px"
        // 设置一个定时器
    var timer;
    // 自调用
    run()

    function run() {
        if (left <= -5120) {
            imglist.style.marginLeft = "0px";
            left = 0;
        }
        // 如果位置为整张图片,暂停一秒
        var n = (left % 1280 == 0) ? 1500 : 10;
        changeimg();
        // 计算图片的下标
        var m = Math.floor(-left / 1280);
        changeicon(m);
        left -= 10
        timer = setTimeout(run, n);
    }

    function changeimg() {
        imglist.style.marginLeft = left + "px";
    }

    function changeicon(m) {
        for (var i = 0; i < icons.length; i++) {
            icons[i].style.backgroundColor = "";
        }
        icons[m].style.backgroundColor = "red";
    }
    // 绑定图片事件
    for (var i = 0; i < imgs.length; i++) {
        // 闭包解决函数内部外部变量通用问题()(i)
        (function(i) {
            imgs[i].onmousemove = function() {
                clearTimeout(timer)
                left = -i * 1280
                changeimg()
                changeicon(i)
            }
            imgs[i].onmouseout = function() {
                run()
            }
        })(i)
    }
    // 绑定圆点事件
    for (var i = 0; i < icons.length; i++) {
        // 闭包解决函数内部外部变量通用问题()(i)
        (function(i) {
            icons[i].onmousemove = function() {
                clearTimeout(timer)
                left = -i * 1280
                changeimg()
                changeicon(i)
            }
            icons[i].onmouseout = function() {
                run()
            }
        })(i)
    }
</script>

  

版权声明:本文为it1998原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/it1998/p/13203881.html