ZeptoソースのGestureモジュールを読む
3824 ワード
Gesture
モジュールは、IOS
上のGesture
イベントのカプセル化に基づいて、scale
属性を利用して、pinch
シリーズイベントをカプセル化する.Zeptoソースシリーズの記事を読んでgithubに載せました.star:reading-zeptoを歓迎します.
ソースバージョン
本稿で読むソースコードはzepto 1である.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
、gesturestart
、gesturechange
、gestureend
のイベントを監視し、これら3つのイベントに基づいて、pinch
、pinchIn
、およびpinchOut
のイベントを組み合わせることができる.実は縮小と拡大のジェスチャー操作です.変数
gesture
オブジェクトとTouch
モジュールのtouch
オブジェクトの役割の差は多くなく、まず「Zeptoソースコードを読むTouchモジュール」のTouch
モジュールに対する分析を見ることができる.parentIfText
function parentIfText(node){
return 'tagName' in node ? node : node.parentNode
}
この補助方法は、ターゲットノードを取得し、ノードが要素ノードでない場合は、親ノードをターゲットノードとします.イベントがテキストノードまたは擬似クラス要素でトリガーされると、要素ノードではない場合があります.
≪イベント|Events|ldap≫
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
で2回の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
イベント、すなわち拡大効果がトリガーされ続けます.最終的には、
e1
、e2
、およびlast
の両方が0
に設定される.last
が存在しない場合(preventDefault
が呼び出された場合)、gesture
はクリアされる.シリーズ記事
署名-非商業的使用-演繹禁止4.0国際(CC BY-NC-ND 4.0)
最後に、すべての文章は同時に微信の公衆番号に送信され、注目を歓迎し、意見を歓迎します.
作者:対角の反対側