淺談移動端之touch事件--手指的滑動事件

來源:互聯網
上載者:User

標籤:script   方向   move   效果   top   string   tom   space   基礎   

原理:

  1. 當開始一個touchstart事件的時候,擷取此刻手指的橫座標startX和縱座標startY;
  2. 當觸發touchmove事件時,在擷取此時手指的橫座標moveEndX和縱座標moveEndY;最後,通過這兩次擷取的座標差值來判斷手指在手機螢幕上的滑動方向。

具體代碼如下:

12345678910111213141516171819202122232425262728 $("body").on("touchstart"function(e) {    e.preventDefault();    startX = e.originalEvent.changedTouches[0].pageX,    startY = e.originalEvent.changedTouches[0].pageY;});$("body").on("touchmove"function(e) {    e.preventDefault();    moveEndX = e.originalEvent.changedTouches[0].pageX,    moveEndY = e.originalEvent.changedTouches[0].pageY,    X = moveEndX - startX,    Y = moveEndY - startY;      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");    }});

總結:touchmove的最後座標減去touchstart的起始座標。

  1. X的結果如果正數,則說明手指是從左往右划動;
  2. X的結果如果負數,則說明手指是從右往左划動;
  3. Y的結果如果正數,則說明手指是從上往下划動;
  4. Y的結果如果負數,則說明手指是從下往上划動。

坑開始了……
理想很豐滿,顯示很骨感!在實際的操作中,手指的上下滑動很難做到直上直下,只要稍微有點斜,只要稍微有點斜,就會被X軸的判斷先行接管,而與我們實際的操作意願相背離。此時就需要添加特殊的判斷技巧,代碼如下:

12345678910111213141516171819202122232425262728 $("body").on("touchstart"function(e) {    e.preventDefault();    startX = e.originalEvent.changedTouches[0].pageX,    startY = e.originalEvent.changedTouches[0].pageY;});$("body").on("touchmove"function(e) {    e.preventDefault();    moveEndX = e.originalEvent.changedTouches[0].pageX,    moveEndY = e.originalEvent.changedTouches[0].pageY,    X = moveEndX - startX,    Y = moveEndY - startY;          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");    }});

以上代碼,在測試時仍不能達到預期的效果,此時要注意到一個事實--$(‘body‘).height = 0(此處是個大坑,但有時也不會出現,望大神指教)
故還應該在此基礎上添加一下代碼:

12345 var windowHeight = $(window).height(),          $body = $("body");      // console.log($(window).height());      // console.log($(‘body‘).height());      $body.css("height", windowHeight);

 到此,已實現了手機移動端手指的上滑、下滑、左滑和右滑操作。

淺談移動端之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.