【js常见效果系列】纯原生html+css+js实现最基础的图片轮播

轮播图.gif

<code class="hljs language-<!DOCTYPE copyable" lang="<html>

<head>
    <meta charset="utf-8">
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #con {
            position: relative;
            width: 750px;
            height: 600px;
            margin: 20px auto;
            overflow: hidden;
        }

        #con .imgs {
            display: flex;
            position: absolute;
        }

        #con .switch p {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            width: 30px;
            height: 60px;
            color: #fff;
            font-size: 20px;
            line-height: 60px;
            text-align: center;
            background-color: rgba(0, 0, 0, .8);
        }

        #con .switch p:first-child {
            border-radius: 0 3px 3px 0;
            left: 0;
        }

        #con .switch p:last-child {
            border-radius: 3px 0 0 3px;
            right: 0;
        }

        #con .switch p:hover {
            cursor: pointer;
        }

        #con .point {
            position: absolute;
            display: flex;
            left: 50%;
            bottom: 20px;
            transform: translateX(-50%);
        }

        #con .point p {
            position: relative;
            width: 10px;
            height: 10px;
            margin: 0 5px;
            border-radius: 50%;
            background-color: #fff;
        }

        #con .point p.active {
            background-color: #FF3D00;
        }
    </style>
</head>

<body>
    <div id="con">
        <div class="imgs">
            <img src="./images/kof-01.jpg">
            <img src="./images/kof-02.jpg">
            <img src="./images/kof-03.jpg">
            <img src="./images/kof-04.jpg">
            <img src="./images/kof-05.jpg">
            <img src="./images/kof-01.jpg">
        </div>
        <div class="switch">
            <p>&lt;</p>
            <p>&gt;</p>
        </div>
        <div class="point">
            <p class="active"></p>
            <p></p>
            <p></p>
            <p></p>
            <p></p>
        </div>
    </div>
    <script>
        //所有节点及资源加载完后触发事件
        window.onload = function () {
            //获取元素
            var oImg = document.querySelector(".imgs");
            var oImgs = oImg.querySelectorAll("img");
            var oLeft = document.querySelector(".switch p:first-child");
            var oRight = document.querySelector(".switch p:last-child");
            var oPoint = document.querySelector(".point");
            var oPoints = oPoint.querySelectorAll("p");




            //图片容器移动单位就是图片的宽度
            var imgWidth = oImgs[0].offsetWidth;
            //图片容器初始位置
            var oImgsPosition = {
                left: 0,
                top: 0
            }
            //计时器,让图片容器定时移动
            var timer = null;
            //当前图片下标
            var i = 0;

            autoSwitch();

            //自动轮播
            function autoSwitch() {
                timer = setInterval(function () {
                    i++;
                    switchFirstOrLast(i);
                    addActive(i);
                    //图片容器位置
                    oImg.style.left = -imgWidth * i + "px";
                }, 1500);
            }

            //给圆点添加选中样式
            function addActive(j) {
                //清除所有圆点背景色
                oPoints.forEach(function (item, index) {
                    item.classList.remove("active");
                });
                //添加当前圆点背景色
                oPoints[j].classList.add("active");
            }

            //回到第一张或最后一张
            function switchFirstOrLast(j) {
                if (j >= oPoints.length) {
                    i = 0;
                } else if (j < 0) {
                    i = oPoints.length - 1;
                }
            }

            //向右切换
            oRight.onclick = function () {
                //先清掉自动播放的定时器带来的影响
                clearInterval(timer);
                i++;
                switchFirstOrLast(i);
                addActive(i);
                oImg.style.left = -imgWidth * i + "px";
                autoSwitch();
            }

            //向左切换
            oLeft.onclick = function () {
                //先清掉自动播放的定时器带来的影响
                clearInterval(timer);
                i--;
                switchFirstOrLast(i);
                addActive(i);
                oImg.style.left = -imgWidth * i + "px";
                autoSwitch();
            }

            //点击圆点切换图片
            oPoints.forEach(function (item, index) {
                item.onclick = function () {
                    clearInterval(timer);
                    i = index;
                    addActive(index);
                    oImg.style.left = -imgWidth * i + "px";
                    autoSwitch();
                }
            })
        }
    </script>
</body>

</html>
 

原创文章,作者:吐槽君,如若转载,请注明出处:https://www.pipipi.net/14824.html

(0)
上一篇 2021年6月4日 下午2:06
下一篇 2021年6月4日 下午2:21

相关推荐

发表评论

登录后才能评论