Zepto源码之gusture模块

gesture 模块是针对 IOS 系统上浏览器的 gesture 事件进行的封装。


;(function($){
  // 判断系统是不是 ios
  if ($.os.ios) {
    var gesture = {}, gestureTimeout

    // 获取目标节点,如果目标节点不是元素节点,那么获取父节点
    function parentIfText(node){
      return 'tagName' in node ? node : node.parentNode
    }

    // 给浏览器绑定 gesturestart, gesturechange, gestureend 三个方法
    $(document).bind('gesturestart', function(e){
      // 记录两次 start 之间的间隔时间
      var now = Date.now(), delta = now - (gesture.last || now)
      // 获取要操作的元素节点
      gesture.target = parentIfText(e.target)
      // 清空已有的计时器任务
      gestureTimeout && clearTimeout(gestureTimeout)
      // 获取起点的缩放值
      gesture.e1 = e.scale
      gesture.last = now
    }).bind('gesturechange', function(e){
      // 更新终点的缩放值
      gesture.e2 = e.scale
    }).bind('gestureend', function(e){
      // 如果有缩放的情况
      if (gesture.e2 > 0) {
        // 根据缩放值的变化情况调用对应的 pinchIn, pinchOut, pinch 方法
        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 = {}
      }
    })

    // 将 gesturechange, gestureend, gesturestart 绑定到对应的 pinch, pinchout, pinchin 上面
    // 从而在多个操作系统上,对应的方法调用事件得以统一
    ;['pinch', 'pinchIn', 'pinchOut'].forEach(function(m){
      $.fn[m] = function(callback){ return this.bind(m, callback) }
    })
  }
})(Zepto)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值