iscroll无限轮播

2017-02-21  本文已影响338人  荞叶

iscroll无限轮播

无限轮播有两种实现方法,一种是遇到边界图片,滚动前先移动下一
张图片的DOM节点。然而这种方法,会更新DOM.实际效果如果图片滚动
动画过慢的话,有卡顿。

这里我介绍另一种方法,轮播图片的前面挺入第一张图片,最后一张后面插
入第一张图片。这样,假如轮播图片有3张,序号是1,2,3。那么增加两张
图片后的顺序是3,1,2,3,1。向右滚动到3,接着1,在动画停止后,1
跳转到1即可。同理,向左滚动3跳转到3.

这里介绍的轮播图,会更复杂一些。当前图片不是全屏的,居中显示,左右
显示部分的前后图片。如图。其实思想还是一样的。再插入两张图片即可。


Video_2017-02-21_142253.gif
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>iScroll轮播</title>
    <script src="zepto.js"></script>
    <script src="iscroll-probe.js"></script>
    <style>

        *{
            margin:0;
            padding:0;
        }
        #carousel {
            height: 68px;
            position: relative;
            width: 100%;
            overflow: hidden;
            outline: 0;
            -webkit-box-sizing: border-box;
            z-index: 1;
        }

        #carousel > div {
            position: absolute;
            width: 2065px;
        }

        #carousel a {
            float: left;
            display: block;
            width: 295px;
            padding:0 5px;
        }

        #carousel a img {
            width: 100%;
            display: block;
            border-radius: 6px;
            border: none;
        }
    </style>
</head>
<body>
<div id="carousel">
    <div>
        <div class="carousel-content" style="transform: translateX(40px);">
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/c0a6a589cdbd5250.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/033c0a2dfe98cc63.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/af3e05118f546a94.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/c0a6a589cdbd5250.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/033c0a2dfe98cc63.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/af3e05118f546a94.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
            <a href="#">![图片](https://img.haomeiwen.com/i1965739/c0a6a589cdbd5250.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
        </div>
    </div>
</div>

<script>
    var myScroll = new IScroll($("#carousel").get(0), {
        mouseWheel: true,
        scrollbars: false,
        scrollX: true,
        scrollY: false,
        eventPassthrough: true,
        preventDefault: false,
        bounce: false,
        //snap:true
        snap: $("#carousel a"),
        snapSpeed: 300,
        momentum: false
    });
    //首次显示第二张
    myScroll.goToPage(2, 0, 0);
    var len = 7;

    myScroll.on('scrollEnd',function (){
        //调整期间,不允许滚动
        myScroll.disable();
        var currentPage = myScroll.currentPage;
        //向左划到第一张时,跳到倒数第二张
        if(currentPage.pageX == 1){
            setTimeout(function(){
                myScroll.goToPage(len-3,0,0);
                myScroll.enable();
            },10);
            //向右划到倒数第一张时,跳到第二张
        }else if(currentPage.pageX >= len -2){
            setTimeout(function(){
                myScroll.goToPage(2,0,0);
                myScroll.enable();
            },10);
        }else{
            myScroll.enable();
        }
    });
    //定时轮播
    setInterval(function(){
        var pageX = myScroll.currentPage.pageX;
        try {
            myScroll.goToPage(++pageX, 0);
        } catch (e) {
            console.log('autoScroll error', e);
        }
    },1000);
</script>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读