移动端列表循环滑动

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;

                    }

                });

            });
时间: 2024-10-12 23:21:39

移动端列表循环滑动的相关文章

[UnityUI]循环滑动列表

效果图: 使用的是UGUI和DOTween 其中比较关键的是循环滑动和层次排序: 1.循环滑动:这里先假设显示五张图片,分别标记为0,1,2,3,4,那么当向左滑动时,序列就变为1,2,3,4,0,这里先保存4的位置,然后从4开始,4的位置和大小向3渐变,3的位置和大小向2渐变,2的位置和大小向1渐变,1的位置和大小向0渐变,0的位置直接变为原来保存的4的位置.也就是说,当向左滑动时,最左端的那张图片特殊处理,其余的向左推进:当向右滑动时,最右端的那张图片特殊处理,其余的向右推进. 2.层次排序

JS案例之5——移动端触屏滑动

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:    //手指离开屏幕时触发 touchcancel:     //系统取消touch事件的时候触发,这个

移动端触屏滑动事件

移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:     //手指放到屏幕上时触发 touchmove:      //手指在屏幕上滑动式触发 touchend:    //手指离开屏幕时触发 touchcancel:     //系统取消touch事件的时候触发,这个

移动端 触屏滑动条菜单(完善版 转)

移动端 触屏滑动条菜单(完善版) 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 8

移动端触屏滑动,JS事件

先了解下 移动端的触屏滑动 毕竟这玩意其实和PC端还是有一定的区别的 hh 整理了下网上的资料放一放 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart:手指放到屏幕上时触发 touchmove:手指在屏幕上滑动式触发 touchend:手指离开屏幕时触发 touchcan

Android使用ViewPager实现左右循环滑动及轮播效果

ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其他页面的信息. 为此我查阅了网络上现有的一些关于实现这样效果的例子,但都不是很满意,经过反复实验,在这里总结并分享给大家,希望能有所帮助. 循环滑动效果的实现:PagerAdap

Android 实现用户列表信息滑动删除功能和选择删除功能

在项目开发过程中,常常需要对用户列表的信息进行删除的操作.Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式.本来的实例集成上述的两种操作方式来实现用户列表删除的效果. 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方

列表循环

列表循环(两种循环方式,非常重要): for item in a: print item 题目:列表a, 它的索引偶数项的值加1,输出新的列表 a = [2, 8, 1, 33, 43, 9, 3] for index, item in enumerate(a): print index, item

Vue.js学习之条件v-if和列表循环v-for详解

本文将继续和大家分享Vue.js的基础知识,主要是介绍Vue.js的条件v-if和列表循环v-for的相关使用,一起来看看吧,希望可以帮助大家更好的学习Vue.js. v-if .v-else.v-show.还可以使用template <div v-if="ok">ok</div> <div v-else>No</div> <div v-show="ok">ok</div> <templa