Zepto.js也许并不陌生,专门针对移动端开发,Zepto有一些基本的触摸事件可以用来做触摸屏交互(tap事件、swipe事件),Zepto是不支持IE浏览器的。
下面来解析一些Zepto.js触摸事件的解析:
1.触摸事件离不开:touchstart:手指触摸屏幕上的时候触发touchmove:手指在屏幕上移动的时候触发touchend:手指从屏幕上拿起的时候触发touchcancel:系统取消touch事件的时候触发
2.事件的event事件对象:event
eventTouch对象包含的数组clentX: 触摸目标在窗口中的x坐标clientY: 触摸目标在窗口中的y坐标identifier: 标识触摸的唯一IDpageX: 触摸目标在页面中的x坐标pageY: 触摸目标在页面中的y坐标screenX: 触摸目标在屏幕中的x坐标screenY: 触摸目标在屏幕中的y坐标target:触摸的DOM节点目标有了这些就可以解析Zeptho.js的touch模块了:看代码吧!
// Zepto.js
// (c) 2010-2012 Thomas Fuchs
// Zepto.js may be freely distributed under the MIT license.
;(function($){var touch = {},touchTimeout, tapTimeout, swipeTimeout,longTapDelay = 750, longTapTimeoutfunction parentIfText(node) {return 'tagName' in node ? node : node.parentNode
}
//判断left或right或上或下滑动
function swipeDirection(x1, x2, y1, y2) {var xDelta = Math.abs(x1 - x2), yDelta = Math.abs(y1 - y2)return xDelta >= yDelta ? (x1 - x2 > 0 ? 'Left' : 'Right') : (y1 - y2 > 0 ? 'Up' : 'Down')
}
function longTap() {longTapTimeout = nullif (touch.last) {touch.el.trigger('longTap')touch = {}}
}
function cancelLongTap() { if (longTapTimeout) clearTimeout(longTapTimeout)longTapTimeout = null}
//取消所有定时器
function cancelAll() {if (touchTimeout) clearTimeout(touchTimeout)if (tapTimeout) clearTimeout(tapTimeout)if (swipeTimeout) clearTimeout(swipeTimeout)if (longTapTimeout) clearTimeout(longTapTimeout)touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = nulltouch = {}
}
$(document).ready(function(){var now, delta
$(document.body) //手指点击后触发
.bind('touchstart', function(e){now = Date.now()delta = now - (touch.last || now)touch.el = $(parentIfText(e.target))touchTimeout && clearTimeout(touchTimeout)touch.x1 = e.pageX //获取x坐标touch.y1 = e.pageY //获取y坐标if (delta > 0 && delta <= 250) touch.isDoubleTap = true //判断是双击touch.last = nowlongTapTimeout = setTimeout(longTap, longTapDelay) //手指触摸时间750触发
}) //手指滑动屏幕触发
.bind('touchmove', function(e){cancelLongTap()touch.x2 = e.pageX //手指移动x坐标touch.y2 = e.pageY //手指移动y坐标if (Math.abs(touch.x1 - touch.x2) > 10) //滑动大于10阻止机器默认touche.preventDefault()
}) //手指从屏幕上拿起的时候触发
.bind('touchend', function(e){cancelLongTap()
// swipe 滑动x大于30px
if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||
(touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
//滑动y大于30px
//触发滑动swipeTimeout = setTimeout(function() {touch.el.trigger('swipe')touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))touch = {} //判断滑动触发方向并触发滑动事件
}, 0)
// normal tap
else if ('last' in touch)// 延迟1分钟,这样我们可以取消“点击”事件,如果“滚动”触发
//
tapTimeout = setTimeout(function() {// 如果是tap事件触发取消所有cancelAll函数的定时器 直接触发tap事件// (cancelTouch cancels processing of single vs double taps for faster 'tap' response)var event = $.Event('tap')event.cancelTouch = cancelAlltouch.el.trigger(event) //触发// 立即触发双击
if (touch.isDoubleTap) { //判读是不是双击touch.el.trigger('doubleTap') //触发touch = {}
}
// 判断是否单击 250ms后触发单击
else {touchTimeout = setTimeout(function(){touchTimeout = nulltouch.el.trigger('singleTap') //触发点击touch = {}
}, 250)
}}, 0)
})$(window).bind('scroll', cancelAll)
})
//绑定事件
;['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 'tap', 'singleTap', 'longTap'].forEach(function(m){$.fn[m] = function(callback){ return this.bind(m, callback) }
})
})(Zepto)

转载于:https://www.cnblogs.com/yscode/p/8759634.html

Zepto.js库touch模块代码解析相关推荐

  1. Focus模块代码解析

    Focus模块代码解析 这就是Focus结构想干的事情.把一个特征图:W * H * C 变到 W/2 * H/2 * C*4.取像素点的过程就是隔一个格子取一个点(横竖都间隔一个). 在YOLOv5 ...

  2. zepto.js 处理Touch事件

    处理Touch事件能让你了解到用户的每一根手指的位置,在touch事件触发的时候产生,可以通过touch event handler的event对象取到,如果基于zepto.js开发,一般是通过eve ...

  3. nil Foundation blueprint模块代码解析

    1. 引言 zkllvm-blueprint库的核心思想还是借鉴了https://github.com/scipr-lab/libsnark: crypto3-zk库:为零知识密码学工具.当前仅支持S ...

  4. Unity中通过Jint调用js库

    在最近的一个项目中遇到了一个需求,一个现有的加密解密的库是Javascript写的,且已经用到了服务器代码中,所以我这边客户端这边有两个选择: "翻译"过来,将JS库中的代码用** ...

  5. 移动开发js库Zepto.js使用中的一些注意点

    来自http://chaoskeh.com/blog/some-experience-of-using-zepto.html的参考. 前段时间完成了公司一个产品的 HTML5 触屏版,开发中使用了 Z ...

  6. Selenium学习 - 库代码解析

    Selenium学习 - 库代码解析 一.selenium/common exceptions.py 定义了一个继承自Exception类的WebDriverException基础异常类,然后通过它扩 ...

  7. 浅析 Node.js 的 vm 模块以及运行不信任代码

    为什么80%的码农都做不了架构师?>>>    在一些系统中,我们希望给用户提供插入自定义逻辑的能力,除了 RPC 和 REST 之外,运行客户提供的代码也是比较常用的方法,好处是可 ...

  8. Node.js ES6 模块化的基本语法-直接导入并执行模块代码

    想单纯执行某个模块中的代码,并不需要得到模块中向外暴露的成员,可以直接导入并执行模块代码 m1.js // 当前文件模块为 m1.js for(let i = 0; i < 3; i++) { ...

  9. ztext - 简单几行代码创建酷炫 3D 特效文字的开源 JS 库

    把网页上的文字变成酷炫的 3D 风格,还能制作旋转动效,有了 ztext.js,只需要几行代码. ztext 能做什么 ztext.js 是一个能把常规的平面文字变成 3D 样式的前端开源代码库,让开 ...

最新文章

  1. linux下mdadm创建软件RAID
  2. C#Array(数组) 一维、多维数组
  3. 【树形dp】vijos1144小胖守皇宫
  4. 6月移动互联网全行业排行榜发布:这些产品正成为新兴市场流量入口
  5. 计算机大作业visio选题,大作业一 用Visio绘网络结构图
  6. EditPlus 5.0 中文免费版,不谢拿走
  7. 关于三星研究院adv机试(开发人员入职机试)
  8. [转载]关于雷电防御_-刘艳红-_新浪博客
  9. C语言printf函数格式化打印之长整型
  10. python ttk style_关于python:在ttk中更改“选项卡标题”的颜色。
  11. html新闻公告滚动效果,好用的滚动公告HTML代码
  12. java+OpenCV3 +百度OCR(或tesseract) 识别表格数据
  13. 基于gradle的dependency-management配置实现多模块springboot依赖库的版本管理
  14. 异构计算(Heterogeneous Compute)
  15. EJBCA证书平台-管理员及用户使用指南
  16. wavenet时间序列预测---TensorFlow版(附源码+数据)
  17. 在c语言中函数的隐函,C语言中的隐式函数声明
  18. java带头结点的单链表_自己实现集合框架 (五): 带头结点单链表的实现
  19. 精诚EAS-MES生产制造执行之机械加工业MES解决方案
  20. 电视无线dns服务器,电视机默认网关DNS服务器

热门文章

  1. set debug mode for flex builder
  2. 通过xmanager远程连接redhat linux as 5
  3. 实时传输协议(RTP)
  4. 可突破任意ARP防火墙,以限制流量为目标的简单网络管理软件
  5. liunx php redis扩展,CentOS 7下安装php-redis扩展及简单使用
  6. Observables简介以及它们与Promise有何不同
  7. 使用Flow检查React,Redux和React-Redux的全面指南
  8. minus oracle 顺序_oracle minus的用法来一波
  9. perl:cpanm安装方式的一种取代方法
  10. 学软件测试的优势有哪些