工作生活

js实现横向滚动轮播并中间暂停下

2019-07-01  本文已影响0人  前端召唤师

效果:


轮播.gif
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <title>滚动+停顿</title>
        <style type="text/css">
            body {
                margin: 0;
            }

            #container {
                position: relative;
                height: 200px;
                overflow: hidden;
            }

            #list {
                position: absolute;
                z-index: 1;
                width: 4200px;
                height: 200px;
            }

            #list .item {
                float: left;
                text-align: center;
            }

            .slide {
                width: 200px;
                height: 200px;
            }
        </style>
        <script src="js/jquery.js"></script>
    </head>
    <body>
        <div id="container" class="container">
            <div id="list"></div>
        </div>
        <script type="text/javascript" language=javascript>
            window.qglist = [{
                    gimg: 'img/1.jpg',
                    gname: '111'
                },
                {
                    gimg: 'img/2.jpg',
                    gname: '222'
                },
                {
                    gimg: 'img/3.jpg',
                    gname: '333'
                }
            ];
            initScroll();

            function initScroll() {
                var len = window.qglist.length,
                    j = 0,
                    l = window.qglist.length - 1,
                    string1 = makeStr(window.qglist, l),
                    string2 = makeStr(window.qglist, 0);
                $('#list').append(string1);
                while (j < len) {
                    var string = makeStr(window.qglist, j);
                    $('#list').append(string);
                    j++;
                }
                $('#list').append(string2);
                window.scrWid = $('.container')[0].offsetWidth + 'px';
                $('#list').css("left", '-' + scrWid);
                $('.item').css("width", scrWid);
                var container = $('#container'),
                    list = document.getElementById('list'),
                    index = 1,
                    timer;

                function animate(offset, unit) {
                    var newLeft = parseInt(list.style.left) - unit,
                        newL = Math.abs(newLeft),
                        scrW = parseInt(window.scrWid),
                        num = newL % scrW;
                    if (num == 0) {
                        stop();
                        setTimeout(function() {
                            play();
                        }, 2000);
                    }
                    list.style.left = newLeft + 'px';
                    //无限滚动判断
                    if (newLeft > offset) {
                        list.style.left = offset * len + 'px';
                    }
                    if (newLeft < offset * (len + 1)) {
                        list.style.left = offset + 'px';
                    }
                }

                function play() {
                    //重复执行的定时器
                    timer = setInterval(function() {
                        start();
                    }, 1)
                }

                function stop() {
                    clearInterval(timer);
                }

                function start() {
                    if (index > len) {
                        index = 1
                    }
                    var n = parseInt(scrWid);
                    animate(-n, 1);
                    index += 1;
                };
                if (len > 1) {
                    play();
                }
            }

            function makeStr(arr, n) {
                var str = "<div class='item'><div>" +
                    "<img class='slide' src='" + arr[n].gimg + "'></div></div>";
                return str;
            }
        </script>
    </body>
</html>
上一篇下一篇

猜你喜欢

热点阅读