Fork me on GitHub

移动端图片滑动

这是一个移动端的图片滑动,因为移动端的滑动带有弹性,所以pc端的滑动在移动端

很生硬。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
    <style>
    body{
        margin: 0;
    }
    body,html{
        width: 100%;
        height: 100%;
    }
    ul,li{
        padding: 0;
        margin: 0;
        list-style: none;
    }
    #container{
        width: 100%;
        position: relative;
        overflow-x:hidden;
        height: 156px; 
    }
    #imgBox{
        position: absolute;
        top: 0;
        left: 0;
    }
    #imgBox li{
        float: left;
    }
    </style>
    <script src="jquery.js"></script>
    <script>
    $(function(){
        switchImg("imgBox");
    })

    function switchImg(id){
        /*初始化*/
        var $imgBox=$("#"+id);
        var $img=$("img",$imgBox);
        $img.css("width",$("body").width());
        $imgBox.css("width",$img.width()*$img.length);
        /*获取图片width*/
        var imgWidth=$img.width();
        $imgBox[0].addEventListener("touchstart",myStart);
        var startPos=0,imgPos=0,num=0,startTime=0;
        function myStart(ev){
            startPos=ev.changedTouches[0].pageX;
            imgPos=parseFloat($imgBox.css("left"));
            //获取时间戳,单位毫秒
            startTime=Date.now();
            $imgBox[0].addEventListener("touchmove",myMove);
            $("body")[0].addEventListener("touchend",myEnd);
        }
        function myMove(ev){
            var movePage=ev.changedTouches[0].pageX;
            var moveDistance=(movePage-startPos)/3+imgPos;
            $imgBox.css("left",moveDistance);
        }
        function myEnd(ev){
            $("body")[0].removeEventListener("touchend",myEnd);
            $imgBox[0].removeEventListener("touchmove",myMove);
            var endPos=ev.changedTouches[0].pageX;
            var distance=endPos-startPos;
            if(Math.abs(distance)>$("body").width()/2||(Date.now()-startTime<100&&distance!=0)){
                if(distance<0){
                num=++num>$img.length-1?$img.length-1:num;
                }else{
                    num=--num<0?0:num;
                }
            }
            $imgBox.animate({"left":-num*$("body").width()},400);    
        }
    }
    </script>
</head>
<body>
    <!-- 编程就是和生活一样,只要观察生活中的细节,其实你就会发现生活很多逻辑和编程逻辑吻合 -->
    <!-- ios的滑屏 -->
    <!-- 1、使用到touchstart/touchmove/touchend,拖拉拽写法差不多 -->
    <!-- 2、如果想出现拖的位置和移动位置不符,只要移动位置减少即可,如除以3 -->
    <!-- 3、touchend是关键,图片移动需要它去判断,如ios手指抬起时所触发的各种可能,弹回,快速抬起的切换图片(使用时间确定速度)
    ,手指缓慢移动需要移动一半的屏幕才切换图片等等,还有切换到首张或末尾时弹回的
    还有使用运动函数,如jquery-》animate或别的库的运动函数
    还有解除touchmove的事件函数,
    还有event对象获取位置是event.changeTouches[0].pageX
    event.changeTouches获取手指列表和其操作。
     -->
     <div id="container">
         <ul id="imgBox">
             <li><img src="img/1.jpg" alt=""></li>
             <li><img src="img/2.jpg" alt=""></li>
             <li><img src="img/3.jpg" alt=""></li>
             <li><img src="img/4.jpg" alt=""></li>
         </ul>
     </div>
</body>
</html>

 

posted @ 2017-03-26 22:46  小数点就是问题  阅读(351)  评论(0编辑  收藏  举报