• 移动端列表循环滑动


    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;  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 =
                {
                     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({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;
    
                        }
    
                    });
    
                });
  • 相关阅读:
    try catch finally中return的执行顺序
    多线程和同步
    orecle常用函数
    java如何调用接口 2
    orecle 函数
    ==和equals在比较字符串时候的区别
    orecle触发器
    java实现同步的方法
    java如何调用接口
    SMM+maven下的log4j配置打印sql
  • 原文地址:https://www.cnblogs.com/zjflove/p/4013956.html
Copyright © 2020-2023  润新知