国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

讀Zepto源碼之Gesture模塊

coolpail / 2285人閱讀

摘要:模塊基于上的事件的封裝,利用屬性,封裝出系列事件。這個判斷需要引入設備偵測模塊。然后是監測事件,根據這三個事件,可以組合出和事件。其中變量對象和模塊中的對象的作用差不多,可以先看看讀源碼之模塊對模塊的分析。

Gesture 模塊基于 IOS 上的 Gesture 事件的封裝,利用 scale 屬性,封裝出 pinch 系列事件。

讀 Zepto 源碼系列文章已經放到了github上,歡迎star: reading-zepto

源碼版本

本文閱讀的源碼為 zepto1.2.0

GitBook

《reading-zepto》

整體結構
;(function($){
  if ($.os.ios) {
    var gesture = {}, gestureTimeout

    $(document).bind("gesturestart", function(e){
     ...
    }).bind("gesturechange", function(e){
      ...
    }).bind("gestureend", function(e){
     ...
    })

    ;["pinch", "pinchIn", "pinchOut"].forEach(function(m){
      $.fn[m] = function(callback){ return this.bind(m, callback) }
    })
  }
})(Zepto)

注意這里有個判斷 $.os.ios ,用來判斷是否為 ios 。這個判斷需要引入設備偵測模塊 Detect 。這個模塊利用 userAgent 來進行設備偵測,里面是一大堆正則表達式,所以這個模塊后面是不打算分析的了。

然后是監測 gesturestartgesturechangegestureend 事件,根據這三個事件,可以組合出 pinchpinchInpinchOut 事件。其實就是縮小和放大的手勢操作。

其中變量 gesture 對象和 Touch 模塊中的 touch 對象的作用差不多,可以先看看 《讀Zepto源碼之Touch模塊》對 Touch 模塊的分析。

parentIfText
function parentIfText(node){
  return "tagName" in node ? node : node.parentNode
}

這個輔助方法是獲取目標節點,如果節點不是元素節點,則用父節點作為目標節點。如果事件在文本節點或者偽類元素上觸發時,會出現不是元素節點的情況。

事件 gesturestart
bind("gesturestart", function(e){
  var now = Date.now(), delta = now - (gesture.last || now)
  gesture.target = parentIfText(e.target)
  gestureTimeout && clearTimeout(gestureTimeout)
  gesture.e1 = e.scale
  gesture.last = now
})

Touch 模塊一樣,在 gesturestart 時,也用 delta 來記錄兩次 start 之間的時間間隔,用 gesture.target 來保存目標元素,e1 是起點時的縮放值。

gesturechange
bind("gesturechange", function(e){
  gesture.e2 = e.scale
})

gesturechange 時,更新終點 guesture.e2 的縮放值。

gestureend
if (gesture.e2 > 0) {
  Math.abs(gesture.e1 - gesture.e2) != 0 && $(gesture.target).trigger("pinch") &&
    $(gesture.target).trigger("pinch" + (gesture.e1 - gesture.e2 > 0 ? "In" : "Out"))
  gesture.e1 = gesture.e2 = gesture.last = 0
} else if ("last" in gesture) {
  gesture = {}
}

如果 gesture.e2 存在(不可能有小于 0 的情況吧?),在起點的縮放值和終點的縮放值不相同的情況下,觸發 pinch 事件;如果起點的縮放值比終點的縮放值大,則繼續觸發 pinchIn 事件,則縮小效果;如果起點的縮放值比終點的縮放值小,則繼續觸發 pinchOut 事件,即放大效果。

最終將 e1e2last 都設置為 0

last 不存在的情況下(在調用 preventDefault 時),將 gesture 清空。

系列文章

讀Zepto源碼之代碼結構

讀Zepto源碼之內部方法

讀Zepto源碼之工具函數

讀Zepto源碼之神奇的$

讀Zepto源碼之集合操作

讀Zepto源碼之集合元素查找

讀Zepto源碼之操作DOM

讀Zepto源碼之樣式操作

讀Zepto源碼之屬性操作

讀Zepto源碼之Event模塊

讀Zepto源碼之IE模塊

讀Zepto源碼之Callbacks模塊

讀Zepto源碼之Deferred模塊

讀Zepto源碼之Ajax模塊

讀Zepto源碼之Assets模塊

讀Zepto源碼之Selector模塊

讀Zepto源碼之Touch模塊

參考

指尖下的js —— 多觸式web前端開發之三:處理復雜手勢

License

署名-非商業性使用-禁止演繹 4.0 國際 (CC BY-NC-ND 4.0)

最后,所有文章都會同步發送到微信公眾號上,歡迎關注,歡迎提意見:

作者:對角另一面

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88643.html

相關文章

  • Zepto源碼Touch模塊

    摘要:在觸發事件前,先將保存定時器的變量釋放,如果對象中存在,則觸發事件,保存的是最后觸摸的時間。如果有觸發的定時器,清除定時器即可阻止事件的觸發。其實就是清除所有相關的定時器,最后將對象設置為。進入時,立刻清除定時器的執行。 大家都知道,因為歷史原因,移動端上的點擊事件會有 300ms 左右的延遲,Zepto 的 touch 模塊解決的就是移動端點擊延遲的問題,同時也提供了滑動的 swip...

    Prasanta 評論0 收藏0
  • Zepto源碼Stack模塊

    摘要:讀源碼系列文章已經放到了上,歡迎源碼版本本文閱讀的源碼為改寫原有的方法模塊改寫了以上這些方法,這些方法在調用的時候,會為返回的結果添加的屬性,用來保存原來的集合。方法的分析可以看讀源碼之模塊。 Stack 模塊為 Zepto 添加了 addSelf 和 end 方法。 讀 Zepto 源碼系列文章已經放到了github上,歡迎star: reading-zepto 源碼版本 本文閱讀的...

    crossea 評論0 收藏0
  • Zepto源碼Form模塊

    摘要:模塊處理的是表單提交。表單提交包含兩部分,一部分是格式化表單數據,另一部分是觸發事件,提交表單。最終返回的結果是一個數組,每個數組項為包含和屬性的對象。否則手動綁定事件,如果沒有阻止瀏覽器的默認事件,則在第一個表單上觸發,提交表單。 Form 模塊處理的是表單提交。表單提交包含兩部分,一部分是格式化表單數據,另一部分是觸發 submit 事件,提交表單。 讀 Zepto 源碼系列文章已...

    陳江龍 評論0 收藏0
  • Zepto源碼fx_methods模塊

    摘要:所以模塊依賴于模塊,在引入前必須引入模塊。原有的方法分析見讀源碼之樣式操作方法首先調用原有的方法,將元素顯示出來,這是實現動畫的基本條件。如果沒有傳遞,或者為值,則表示不需要動畫,調用原有的方法即可。 fx 模塊提供了 animate 動畫方法,fx_methods 利用 animate 方法,提供一些常用的動畫方法。所以 fx_methods 模塊依賴于 fx 模塊,在引入 fx_m...

    junbaor 評論0 收藏0
  • Zepto源碼IOS3模塊

    摘要:用法與參數要理解這段代碼,先來看一下的用法和參數用法參數回調函數,有如下參數上一個回調函數返回的值或者是初始值當前值當前值在數組中的索引調用的數組初始值,如果沒有提供,則為數組的第一項。接下來,檢測回調函數是否為,如果不是,拋出類型錯誤。 IOS3 模塊是針對 IOS 的兼容模塊,實現了兩個常用方法的兼容,這兩個方法分別是 trim 和 reduce 。 讀 Zepto 源碼系列文章...

    lavnFan 評論0 收藏0

發表評論

0條評論

coolpail

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<