移動端touch事件滾動

來源:互聯網
上載者:User

標籤:

本來想用在北京歡樂穀手機上用touch事件來類比局部左右內容滾動裡,但在touchmove上下滾動時由于禁止了預設事件而body捲軸不能滾動,雖然可以根據touchmove的座標來判斷方向,但體驗效果不理想。

後來在查詢相關資料後原來可以直接在css中使用overflow:auto;出來的捲軸用CSS3的-wekit-scrollbar{display:none}來隱藏;

*拓展
*::-webkit-scrollbar 捲軸整體部分
*::-webkit-scrollbar-thumb 捲軸裡面的小方塊,能向上向下移動(或往左往右移動,取決於是垂直捲軸還是水平捲軸)
*::-webkit-scrollbar-track 捲軸的軌道(裡面裝有Thumb)
*::-webkit-scrollbar-button 捲軸的軌道的兩端按鈕,允許通過點擊微調小方塊的位置。
*::-webkit-scrollbar-track-piece 內層軌道,捲軸中間部分(除去)
*::-webkit-scrollbar-corner 邊角,即兩個捲軸的交匯處
*::-webkit-resizer 兩個捲軸的交匯處上用於通過拖動調整元素大小的小控制項

 

touch事件來類比局部左右內容滾動

判斷很簡單,touchmove的最後座標減去touchstart的起始座標,X的結果如果正數,則說明手指是從左往右划動;X的結果如果負數,則說明手指是從右往左划動;Y的結果如果正數,則說明手指是從上往下划動;Y的結果如果負數,則說明手指是從下往上划動。

 

if ( X > 0 ) {    alert("left 2 right");}else if ( X < 0 ) {    alert("right 2 left");}else if ( Y > 0) {    alert("top 2 bottom");}else if ( Y < 0 ) {    alert("bottom 2 top");}else{    alert("just touch");}

 

這再邏輯上沒有任何問題。但在實際操作中,手指的上下滑動其實是很難直上直下的,只要稍微有點斜,就會被X軸的判斷先行接管。
那麼接下來加上特別的判斷技巧:增加的判斷也很簡單,無非就是判斷哪個的差值比較大。

if ( Math.abs(X) > Math.abs(Y) && X > 0 ) {    alert("left 2 right");}else if ( Math.abs(X) > Math.abs(Y) && X < 0 ) {    alert("right 2 left");}else if ( Math.abs(Y) > Math.abs(X) && Y > 0) {    alert("top 2 bottom");}else if ( Math.abs(Y) > Math.abs(X) && Y < 0 ) {    alert("bottom 2 top");}else{    alert("just touch");}

 

code

function touchTable(){    var moveTable = document.getElementById("showtime_bj");    //item_ID    var $win =$(window);    var tableWidth = moveTable.offsetWidth;       var halfWidth = tableWidth/2;    var objTouches = null;    var startx,starty,tableLeft,distx=0,disty=0;    console.log(tableWidth)    //綁定touchstart事件    moveTable.addEventListener("touchstart",touchStart,false);    function touchStart(e){        objTouches = e.changedTouches[0];        tableLeft = parseInt(moveTable.style.left)        startx = parseInt(objTouches.pageX);        starty = parseInt(objTouches.pageY);        // document.body.addEventListener(‘touchmove‘, bodyScroll, false);    }    //綁定touchmove事件    moveTable.addEventListener("touchmove",touchMove,false);    function touchMove(e){        objTouches = e.changedTouches[0];        distx = parseInt(objTouches.pageX) - startx;        disty = parseInt(objTouches.pageY) - starty;        //判斷touch滑動的方向        if (disty > 10 || disty < -10) {            document.body.removeEventListener(‘touchmove‘, bodyScroll, false);          //向上向下滑動時恢複body的捲軸事件        }else if (distx > 0 ||distx < 0) {            document.body.addEventListener(‘touchmove‘, bodyScroll, false);             //向上向下滑動時取消body的捲軸事件            moveTable.style.left = ((tableLeft + distx < -halfWidth) ? -halfWidth : (tableLeft + distx > 0) ? 0 : tableLeft + distx) + "px";        }    }    //綁定touchend,touchcancel事件,當手指離開時事件    moveTable.addEventListener("touchend touchcancel",touchEnd,false);    function touchEnd(e){        document.body.removeEventListener(‘touchmove‘, bodyScroll, false);              //恢複body的捲軸事件    }    function bodyScroll(e){        e.preventDefault();    }} 

 

移動端touch事件滾動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.