怎么用原生JS实现无缝轮播?(不在头尾加辅助图的情况下)

一般实现无缝轮播都需要辅助图,所以就想问下有不需要辅助图的方法吗。

阅读 3.4k
3 个回答

绝对定位。你把轮播想象成两个DOM。移过来移过去

不需要辅助图,但是需要至少有3张图
1张图 应该不需要滚动
2张图 复制成4张图就可以

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Banner</title>
    <style>
    .banner {position:relative;margin:0 40px;width:300px;height:200px;border-radius:10px;background:url('') center #F6F6F6;overflow:hidden;}
    .banner .item {position:absolute;width:300px;height:200px;left:300px;background:center center/contain transparent;z-index:1;}
    .banner .item.transition {
        -webkit-transition: left 1s;
        -moz-transition: left 1s;
        -ms-transition: left 1s;
        -o-transition: left 1s;
        transition: left 1s;
    }

    .banner .item-off  {left:-300px;z-index:2;}
    .banner .item-active {left:0;z-index:4;}
    </style>
    <script>
    document.addEventListener('DOMContentLoaded', function(){
        (function(){
            let delay = 2000;
            let arrItem = Array.prototype.slice.call(document.querySelectorAll('.banner .item'));
            let cntItem = arrItem.length;

            let idx = 0;

            function next()
            {
                let idxOff = idx - 1;
                if(idxOff < 0)
                    idxOff = cntItem - 1;

                arrItem[idxOff].classList.remove('item-off');
                arrItem[idx].classList.remove('item-active');
                arrItem[idx].classList.add('item-off');

                idx ++;
                if(idx >= cntItem)
                    idx = 0;

                arrItem[idx].classList.add('item-active');

                setTimeout(next, delay);
            }

            function init()
            {
                arrItem[idx].classList.add('item-active');

                if(cntItem > 1)
                {
                    setTimeout(next, delay);
                }
            }

            init();

        })();
    });
</script>
</head>
<body>
<div class="banner">
    <a class="item transition" href="javascript:void(0)" style="background-image:url(https://live-static.segmentfault.com/119/956/1199561634-5e676d01590e7_render)"></a>
    <a class="item transition" href="javascript:void(0)" style="background-image:url(https://live-static.segmentfault.com/119/956/1199561634-5e676d01590e7_render)"></a>
    <a class="item transition" href="javascript:void(0)" style="background-image:url(https://live-static.segmentfault.com/197/853/1978530267-5e0d58e51c159_render)"></a>
</div>
</body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题