首页 > 代码库 > 移动端列表循环滑动

移动端列表循环滑动

1、循环滑动效果(先看效果)

    

2、如何布局(以下是我的思路)

 

   <style type="text/css">        * {            margin: 0;            padding: 0;        }        #scroll div {            border: 1px solid red;            float: left;            background: #abcdef;                      text-align: center;         }    </style></head><body>    <div id="container" style="position: relative; width: 100%; height: 90%; overflow: hidden;">        <div id="scroll" style="position: absolute; height: 100%;">            <div>5</div>                        <div>1</div>            <div>2</div>            <div>3</div>            <div>4</div>            <div>5</div>                        <div>1</div>        </div>    </div></body>

 

3、触屏移动的算法

 

具体代码如下:

   var scroll = document.getElementById(‘scroll‘);            var container = document.getElementById("container")            var clientAtt =            {                width: document.documentElement.clientWidth,                height: document.documentElement.clientHeight            };            //设置大小            container.style.width = clientAtt.width + ‘px‘;            container.style.height = clientAtt.height + ‘px‘;            scroll.style.width = clientAtt.width * 7 + ‘px‘;            scroll.style.left = -clientAtt.width + ‘px‘;            $("#scroll  div").css({width:clientAtt.width-2+‘px‘,height:clientAtt.height-2+‘px‘,‘line-height‘:clientAtt.height-2+‘px‘});                        var initLeft = 0;//物体初始距离            var disStart = 0;//手指触屏距离            scroll.addEventListener("touchstart", function (ev) {                var oEvent = ev || event;                oEvent.preventDefault();                var touch = oEvent.touches[0];//获取手指触屏信息                disStart = touch.clientX;//手指的触屏起点X                initLeft = this.offsetLeft;//物体的起点left            }, false)            scroll.addEventListener("touchmove", function (ev) {                var oEvent = ev || event;                oEvent.preventDefault();                if (oEvent.targetTouches.length == 1) {                    var touch = oEvent.touches[0];//获取手指触屏信息                    var disEnd = touch.clientX;//手指触屏X                    //当前物体的移动距离=手指触屏位置-手指触屏起始位置+物体的起始位置                    var moveDis = disEnd - disStart + initLeft;                    //滑动边界处理                    if (Math.abs(moveDis) > clientAtt.width * 6) {                         moveDis = -clientAtt.width * 6;                    }                    if (moveDis > 0) {                        moveDis = 0;                    }                    this.style.left = moveDis + ‘px‘;                }             }, false);

 4、手指离开屏幕的特殊处理

 var currIndex = 1;//第一个            scroll.addEventListener(‘touchend‘, function (ev) {                var absLeft = Math.abs(this.offsetLeft);                if (absLeft != Math.abs(initLeft)) {                    if (absLeft > Math.abs(initLeft)) {                        currIndex++;                    }                    else {                        currIndex--;                    }                }                currIndex = currIndex > 6 ? 6 : currIndex;                $(this).stop(true).animate({ "left": -currIndex * clientAtt.width + ‘px‘ }, 300, function () {                    //循环:首尾处理                    /*                      第5个元素 如果继续向左滑 出现第1个 滑动到第1个的时候 如何和第2个元素相接????                      为了处理这个问题,当手指松开的时候 立即将当期物体的位置 改成 滑动到第1个元素时的距离                       第1个元素 继续向右滑 同理处理                    */                    if (currIndex == 6) {                        $(this).css("left", -clientAtt.width + ‘px‘);                        currIndex = 1;                    }                    else if (currIndex == 0) {                        $(this).css("left", -5 * clientAtt.width + ‘px‘);                        currIndex = 5;                    }                });            });

 

移动端列表循环滑动