移動端上下滑動事件之--坑爹的touch.js


下面的方法,不知道是操作方法不對還是啥.  在 zepto.js 里面加那一段代碼不起作用

百度的 touch.js 是可以用的,但是使用方式 和 zepto有點不一樣.

解決方案:參照這個鏈接地址

http://www.cnblogs.com/zhongxia/p/5410478.html

 

==========================================================

轉:http://blog.csdn.net/minidrupal/article/details/39611605?utm_source=tuicool&utm_medium=referral

移動端頁面的盛行,微信的便利的頁面推廣等等,讓越來越多的css3效果和html5在手機端大放異彩。

於是乎,各式各樣的簡約酷炫的html5頁面層出不窮,最多的就是視差滾動+css3動畫。

接下來就說說自己在搞這些頁面里面碰到的一個小問題-------zepto.js里面,坑爹的touch.js的上下滑動(swipe)事件失效。

 

在舉例之前,先科普一下如何在pc端,查看html5頁面在各種分辨率的手機的展示情況。

最常見的就是利用谷歌的手機模擬器。

 

步驟1:打開谷歌瀏覽器,按F12.

步驟2:然后按截圖里面的步驟,選擇各種分辨率,在刷新一下頁面,就可以看到效果。

注:各種手機的選擇

 

開始描述問題之前,先提供幾個網址,

讓你們試試能不能看到效果。

 

 
 
 
能在谷歌模擬器看到不同分辨率的效果。截幾個圖看一下。
 
 
 
 
好了,進入正題。
做這類html5頁面,最主要的事件就是滑動事件。
分別是左右滑動和上下滑動。
說到這里,可能很多人都會脫口而出。用zepto.js就可以簡單搞定啦。
 
我也是這么想的。於是很快的,就用zepto.js加上它的touch組件,touch.js實現了相應的效果。
在谷歌瀏覽器的模擬器也能很好的兼容。
 
后來放上測試服務器,用手機一看,問題來了!!!!
手機上的uc,騰訊,微信自帶瀏覽器,QQ自帶瀏覽器器,蘋果系統的瀏覽器,安卓的原生瀏覽器,上下滑動的事件都失效!
只有谷歌瀏覽器是有事件相應的。坑爹啊!!!!
 
zepto.js用的人估計不少,想不到touch.js竟然兼容這么差,還是我打開的方式不對?!!!
這里就不貼這個js里面的代碼出來了。
 
遇到問題,只好尋求其他解決方法。
解決方法先列幾個吧。
第一個:jquery mobile里面的touch組件。
第二個:百度的童鞋們實現的touch.js.網址也貼一下吧: http://touch.code.baidu.com/
 
第三個就是技術群里面的一些童鞋提供,親測是有效的:
 
[javascript]  view plain  copy

 

  1. (function($) {  
  2.     var options, Events, Touch;  
  3.     options = {  
  4.         x: 20,  
  5.         y: 20  
  6.     };  
  7.     Events = ['swipe''swipeLeft''swipeRight''swipeUp''swipeDown''tap''longTap''drag'];  
  8.     Events.forEach(function(eventName) {  
  9.         $.fn[eventName] = function() {  
  10.             var touch = new Touch($(this), eventName);  
  11.             touch.start();  
  12.             if (arguments[1]) {  
  13.                 options = arguments[1]  
  14.             }  
  15.             return this.on(eventName, arguments[0])  
  16.         }  
  17.     });  
  18.     Touch = function() {  
  19.         var status, ts, tm, te;  
  20.         this.target = arguments[0];  
  21.         this.e = arguments[1]  
  22.     };  
  23.     Touch.prototype.framework = function(e) {  
  24.         e.preventDefault();  
  25.         var events;  
  26.         if (e.changedTouches) events = e.changedTouches[0];  
  27.         else events = e.originalEvent.touches[0];  
  28.         return events  
  29.     };  
  30.     Touch.prototype.start = function() {  
  31.         var self = this;  
  32.         self.target.on("touchstart",  
  33.         function(event) {  
  34.             event.preventDefault();  
  35.             var temp = self.framework(event);  
  36.             var d = new Date();  
  37.             self.ts = {  
  38.                 x: temp.pageX,  
  39.                 y: temp.pageY,  
  40.                 d: d.getTime()  
  41.             }  
  42.         });  
  43.         self.target.on("touchmove",  
  44.         function(event) {  
  45.             event.preventDefault();  
  46.             var temp = self.framework(event);  
  47.             var d = new Date();  
  48.             self.tm = {  
  49.                 x: temp.pageX,  
  50.                 y: temp.pageY  
  51.             };  
  52.             if (self.e == "drag") {  
  53.                 self.target.trigger(self.e, self.tm);  
  54.                 return  
  55.             }  
  56.         });  
  57.         self.target.on("touchend",  
  58.         function(event) {  
  59.             event.preventDefault();  
  60.             var d = new Date();  
  61.             if (!self.tm) {  
  62.                 self.tm = self.ts  
  63.             }  
  64.             self.te = {  
  65.                 x: self.tm.x - self.ts.x,  
  66.                 y: self.tm.y - self.ts.y,  
  67.                 d: (d - self.ts.d)  
  68.             };  
  69.             self.tm = undefined;  
  70.             self.factory()  
  71.         })  
  72.     };  
  73.     Touch.prototype.factory = function() {  
  74.         var x = Math.abs(this.te.x);  
  75.         var y = Math.abs(this.te.y);  
  76.         var t = this.te.d;  
  77.         var s = this.status;  
  78.         if (x < 5 && y < 5) {  
  79.             if (t < 300) {  
  80.                 s = "tap"  
  81.             } else {  
  82.                 s = "longTap"  
  83.             }  
  84.         } else if (x < options.x && y > options.y) {  
  85.             if (t < 250) {  
  86.                 if (this.te.y > 0) {  
  87.                     s = "swipeDown"  
  88.                 } else {  
  89.                     s = "swipeUp"  
  90.                 }  
  91.             } else {  
  92.                 s = "swipe"  
  93.             }  
  94.         } else if (y < options.y && x > options.x) {  
  95.             if (t < 250) {  
  96.                 if (this.te.x > 0) {  
  97.                     s = "swipeLeft"  
  98.                 } else {  
  99.                     s = "swipeRight"  
  100.                 }  
  101.             } else {  
  102.                 s = "swipe"  
  103.             }  
  104.         }  
  105.         if (s == this.e) {  
  106.             this.target.trigger(this.e);  
  107.             return  
  108.         }  
  109.     }  
  110. })(window.jQuery || window.Zepto);  


總結:為什么要把這個作為一篇博客發出去,就是因為之前碰到這個問題的時候,問度娘問谷歌都很少答案。所以把這個小問題說出來,讓碰到類似問題的童鞋,能夠有一些啟發。
 
 
 
 

Author: Alone
Antroduction: 高級前端開發工程師
Sign: 人生沒有失敗,只有沒到的成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM