天天看點

html5 touch事件實作觸屏頁面上下滑動(一)

最近做的做那個app的項目由于用overflow:hidden導緻了很多問題,于是決定研究下html5的touch事件。想找個全面點的文章真是難死了,雖然好多關于html5 touch的文章但大多都是介紹touch事件或者很簡短的小demo。

下午好生研究了下終于搞出了個比較全面的上下滑動的小demo,代碼比較簡單。

下面是完整代碼,我把幾個重要的地方做了紅色标記

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1 user-scalable=0"/>
    <title>2014-4-29</title>
    <style>
    * {margin: 0;  padding: 0;}
    #outer{ width:90%; height: 490px; background: #000; margin: auto;  overflow: hidden;}
    #inner{width:80%; height: 2000px; background: #f67d42; margin: auto; position:relative; top:0;  }
    </style>
    <script src='jquery-1.9.1.min.js'></script>
</head>
<body>

<div id="spText"></div>
    <div id="outer">
        <div id="inner">
        123<br>        123<br>    gag<br> af<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> yryyr<br> ryry<br> 123<br> 123<br> 123<br> 123<br> 123<br> sdff<br> fef<br> 123<br> hr<br> hrh<br> 5y<br> 123<br> er<br> ert<br> 123<br> rgdgdg<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> gfgfgfgfgfgf<br> sdsdsdsdsdsd<br> sf<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> gdggdgdg<br> 123<br> drgdrgd<br> 123<br> 123<br> 123<br> yuyuyuyuyuy<br> hjkhjkhkhkhjkhkh<br> kjkjk<br>123<br>      123<br>    gag<br> af<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> yryyr<br> ryry<br> 123<br> 123<br> 123<br> 123<br> 123<br> sdff<br> fef<br> 123<br> hr<br> hrh<br> 5y<br> 123<br> er<br> ert<br> 123<br> rgdgdg<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> gfgfgfgfgfgf<br> sdsdsdsdsdsd<br> sf<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> 123<br> gdggdgdg<br> 123<br> drgdrgd<br> 123<br> 123<br> 123<br> yuyuyuyuyuy<br> hjkhjkhkhkhjkhkh<br> kjkjk<br>      
        </div>
    </div>

    <script>
        var startX,//觸摸時的坐标
            startY,
             x, //滑動的距離
             y,
             aboveY=0; //設一個全局變量記錄上一次内部塊滑動的位置 

         var inner=document.getElementById("inner");
         
            function touchSatrt(e){//觸摸
                e.preventDefault();
                var touch=e.touches[0];
                startY = touch.pageY;   //剛觸摸時的坐标              
            }

            function touchMove(e){//滑動          
                 e.preventDefault();        
                 var  touch = e.touches[0];               
                 y = touch.pageY - startY;//滑動的距離
                //inner.style.webkitTransform = 'translate(' + 0+ 'px, ' + y + 'px)';  //也可以用css3的方式     
                inner.style.top=aboveY+y+"px"; //這一句中的aboveY是inner上次滑動後的位置                   
            }  

            function touchEnd(e){//手指離開螢幕
              e.preventDefault();                   
              aboveY=parseInt(inner.style.top);//touch結束後記錄内部滑塊滑動的位置 在全局變量中展現 一定要用parseInt()将其轉化為整數字;

            }//
             document.getElementById("outer").addEventListener('touchstart', touchSatrt,false);  
             document.getElementById("outer").addEventListener('touchmove', touchMove,false);  
             document.getElementById("outer").addEventListener('touchend', touchEnd,false);  
    </script>
</body>

</html>      

繼續閱讀