用JavaScript做简单的轮播图

1. 用display属性的block或none控制轮播图

代码如下:

<!DOCTYPE HTML>

<head>
    <meta a charset="utf-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        #desktop {
            width: 100px;
            height: 100px;
            margin: 10px auto;
        }
        
        #img1 {
            display: block;
            width: 100px;
            height: 100px;
            background: red;
        }
        
        #img2,
        #img3,
        #img4 {
            display: none;
            width: 100px;
            height: 100px;
        }
        
        #img2 {
            background: yellow;
        }
        
        #img3 {
            background: blue;
        }
        
        #img4 {
            background: pink;
        }
        
        #prev {
            position: absolute;
            left: 46%;
            top: 6%;
        }
        
        #next {
            position: absolute;
            left: 53%;
            top: 6%;
        }
        
        #button {
            position: absolute;
            left: 47%;
            margin: 10px auto;
        }
        
        #button a {
            border-radius: 50%;
            color: black;
            text-decoration: none;
            margin-right: 20px;
        }
    </style>
    <script>
        window.onload = function() {
            var thisPage = 1; //开始默认第一张轮播图序号是1
            var i = 0;

            document.getElementById("prev").onclick = function() {
                //先将所有轮播图全关掉 
                for (i = 1; i <= 4; i++) {
                    document.getElementById("img" + i).style.display = "none";
                };
                thisPage--; //每点击一次向前按钮这个序号减1
                if (thisPage == 0) {
                    //当它为0时,令它等于最后一张轮播图对应的序号
                    thisPage = 4;
                };
                document.getElementById("img" + thisPage).style.display = "block";
            };

            document.getElementById("next").onclick = function() {
                //同样,将所有轮播图全关掉
                for (i = 1; i <= 4; i++) {
                    document.getElementById("img" + i).style.display = "none";
                };
                thisPage++; //每点击一次向前按钮这个序号加1
                if (thisPage == 5) {
                    //当它不小心超出范围时让它回到第一张轮播图
                    thisPage = 1;
                };
                document.getElementById("img" + thisPage).style.display = "block";
            };

            //给每个按钮添加属性
            document.getElementById("button1").onclick = function() {
                //同样,先将所有轮播图关闭
                for (var k = 1; k <= 4; k++) {
                    document.getElementById("img" + k).style.display = "none";
                };
                thisPage = 1; //将当前页面的序号更新
                document.getElementById("img1").style.display = "block";
            };

            document.getElementById("button2").onclick = function() {
                //同样,先将所有轮播图关闭
                for (var k = 1; k <= 4; k++) {
                    document.getElementById("img" + k).style.display = "none";
                };
                thisPage = 1; //将当前页面的序号更新
                document.getElementById("img2").style.display = "block";
            };

            document.getElementById("button3").onclick = function() {
                //同样,先将所有轮播图关闭
                for (var k = 1; k <= 4; k++) {
                    document.getElementById("img" + k).style.display = "none";
                };
                thisPage = 1; //将当前页面的序号更新
                document.getElementById("img3").style.display = "block";
            };

            document.getElementById("button4").onclick = function() {
                //同样,先将所有轮播图关闭
                for (var k = 1; k <= 4; k++) {
                    document.getElementById("img" + k).style.display = "none";
                };
                thisPage = 1; //将当前页面的序号更新
                document.getElementById("img4").style.display = "block";
            };
        }
    </script>
</head>

<body>
    <div id="desktop">
        <div id="img1"></div>
        <div id="img2"></div>
        <div id="img3"></div>
        <div id="img4"></div>
    </div>
    <input type="button" value="" id="prev">
    <input type="button" value="" id="next">
    <div id="button">
        <a href="javascript:;" id="button1">1</a>
        <a href="javascript:;" id="button2">2</a>
        <a href="javascript:;" id="button3">3</a>
        <a href="javascript:;" id="button4">4</a>
    </div>
</body>

</html>

如果觉得最后一部分js代码有些多余的话可以这样修改:

        window.onload = function() {
            var i = 0;
            var sum = 0;

            document.getElementById("prev").onclick = function() {
                //先将所有轮播图全关掉 
                for (i = 1; i <= 4; i++) {
                    document.getElementById("img" + i).style.display = "none";
                };
                thisPage--; //每点击一次向前按钮这个序号减1
                if (thisPage == 0) {
                    //当它为0时,令它等于最后一张轮播图对应的序号
                    thisPage = 4;
                };
                document.getElementById("img" + thisPage).style.display = "block";
            };

            document.getElementById("next").onclick = function() {
                //同样,将所有轮播图全关掉
                for (i = 1; i <= 4; i++) {
                    document.getElementById("img" + i).style.display = "none";
                };
                thisPage++; //每点击一次向前按钮这个序号加1
                if (thisPage == 5) {
                    //当它不小心超出范围时让它回到第一张轮播图
                    thisPage = 1;
                };
                document.getElementById("img" + thisPage).style.display = "block";
            };

            //给每个按钮添加属性
            document.getElementById("button" + 1).onclick = function() {
                button(1);
            };
            document.getElementById("button" + 2).onclick = function() {
                button(2);
            };
            document.getElementById("button" + 3).onclick = function() {
                button(3);
            };
            document.getElementById("button" + 4).onclick = function() {
                button(4);
            };
        }

        var thisPage = 1; //开始默认第一张轮播图序号是1,把它放到这声明,代表它是一个全局变量

        function button(sum) {
            for (var k = 1; k <= 4; k++) {
                document.getElementById("img" + k).style.display = "none";
            };
            thisPage = sum; //将当前页面的序号更新
            document.getElementById("img" + sum).style.display = "block";
        };

原理就是函数的封装,不过代码应该还能继续精缩,进一步缩短的话可以利用我下面代码中的this.index,用for循环来给button一键添加onclick事件,让它变得更短小精悍。

2.利用偏移值来控制轮播图

代码如下

<!DOCTYPE HTML>

<head>
    <meta a charset="utf-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        #page_contain {
            position: relative;
            overflow: hidden;
            left: 47%;
        }
        
        #desktop {
            position: absolute;
            display: flex;
            flex-direction: row;
        }
        
        #img1 {
            width: 100px;
            height: 100px;
            background: red;
        }
        
        #img2,
        #img3,
        #img4 {
            width: 100px;
            height: 100px;
        }
        
        #img2 {
            background: yellow;
        }
        
        #img3 {
            background: blue;
        }
        
        #img4 {
            background: pink;
        }
        
        #prev {
            position: absolute;
            left: 46%;
            top: 6%;
        }
        
        #next {
            position: absolute;
            left: 53%;
            top: 6%;
        }
        
        #button {
            position: absolute;
            left: 47%;
        }
        
        #button a {
            border-radius: 50%;
            color: black;
            text-decoration: none;
            margin-right: 20px;
        }
    </style>
    <script>
        window.onload = function() { //页面加载时执行该函数
            //获取元素
            var pageContain = document.getElementById("page_contain");
            var oDiv = document.getElementById("desktop");
            var aDiv = oDiv.getElementsByTagName("div");
            var prev = document.getElementById("prev");
            var next = document.getElementById("next");
            var obutton = document.getElementById("button");
            var abutton = obutton.getElementsByTagName("a");

            pageContain.style.height = aDiv[0].offsetHeight + 'px';
            pageContain.style.width = aDiv[0].offsetWidth + 'px';
            oDiv.style.width = aDiv.length * aDiv[0].offsetWidth + 'px';
            oDiv.style.height = aDiv[0].offsetHeight + 'px';
yuan
            prev.onclick = function() {
                //所加的if语句是为了将轮播的图片首尾相连
                if (oDiv.offsetLeft >= 0) {
                    oDiv.style.left = -(aDiv.length - 1) * aDiv[0].offsetWidth + 'px';
                } else {
                    oDiv.style.left = oDiv.offsetLeft + aDiv[0].offsetWidth + 'px';
                }
            };
            next.onclick = function() {
                //所加的if语句是为了将轮播的图片首尾相连
                if (oDiv.offsetLeft <= -(aDiv.length - 1) * aDiv[0].offsetWidth) {
                    oDiv.style.left = "0";
                } else {
                    oDiv.style.left = oDiv.offsetLeft - aDiv[0].offsetWidth + 'px';
                }
            }
            //利用循环快速的给按钮控制图片的移动添加样式
            for (var i = 0; i < aDiv.length; i++) {
                abutton[i].index = i;
                abutton[i].onclick = function() {
                    oDiv.style.left = -this.index * aDiv[0].offsetWidth + 'px';
                }
            }
        }
    </script>
</head>

<body>
    <div id="page_contain">
        <div id="desktop">
            <div id="img1">这是1</div>
            <div id="img2">这是2</div>
            <div id="img3">这是3</div>
            <div id="img4">这是4</div>
        </div>
    </div>
    <input type="button" value="" id="prev">
    <input type="button" value="" id="next">
    <div id="button">
        <a href="javascript:;" id="button1">1</a>
        <a href="javascript:;" id="button2">2</a>
        <a href="javascript:;" id="button3">3</a>
        <a href="javascript:;" id="button4">4</a>
    </div>
</body>
</html>

原理:
在这里插入图片描述
通过控制desktop的 Left值,来控制page_contain显示的镜头,模拟了一个拉动纸带的过程。不过在这里要注意的是desktop的 position属性一定要用absolute,page_contain的position要设为relative

发布了2 篇原创文章 · 获赞 14 · 访问量 116

猜你喜欢

转载自blog.csdn.net/qq_45838541/article/details/104349033
今日推荐