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)
Zepto.js库touch模块代码解析
转载于:https://www.cnblogs.com/yscode/p/8759634.html
相关文章:

PHP 常用字符串处理代码片段
移除 HTML 标签 $text strip_tags($input, ""); 返回 $start 和 $end 之间的文本function GetBetween($content,$start,$end){ $r explode($start, $content); if (isset($r[1])){ $r explode($end, $r[1]); return $r[0]; } ret…

【maven】初识maven
一:maven的配置: 集成到eclipse步骤: 1、下载maven,放到软件安装目录,打开目录:MAVEN_HOME/conf/ 2、修改文件setting.xml:仓库配置目录:<localRepository>D:\DATA\lo…

[C++再学习系列] 函数模板和类模板
函数模板和类模板 C 提供类模板和函数模板。函数模板允许重载 ,而类模板不允许重载(类无重载概念)。类模板可以进行全特化和偏特化,而函数模板仅能够全特化 。因此,写一个看似函数模板偏特化的函数模板实际上是在写一个单独的主函数模板&…
git init 与 git init --bare 区别
git init 与 git init --bare 区别 发现问题 最早是在公司的wiki上发现了这个命令,google后发现值得记录下来 实践中发现的区别 网上找了很多资料,但说的很乱,干脆在自己的服务器上执行对比了一下:git init demo1 # 表示创建一个…

一个虚函数和虚继承的问题。
这个问题困惑好几天了。废话不多说,先上代码。 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 virtual void aa() 8 { 9 } 10 private: 11 char k[3]; 12 }; 13 14 class B:publi…

Linux性能分析命令工具汇总
转自:http://rdc.hundsun.com/portal/article/731.html?refmyread出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善…

【jsp】使用get方法传值的格式
get:通过地址提交 格式: http://192.168.7.45:7002/jsp29/doAddStu.jsp?stuNo20181013123&stuName%E5%B0%8F%E5%BC%BA&gender0&age19&major%E7%94%B5%E5%AD%90%E5%B7%A5%E7%A8%8B&score650 即:网址?参数名值&参数名值

指针02 - 零基础入门学习C语言42
第八章:指针02 让编程改变世界 Change the world by program 对“&”和“*”运算符再做些说明 如果已执行了语句 pointer_1 &a; (1) &*pointer_1的含义是什么? “&”和“*”两个运算符的优先级别相同,但按自右而左方向结…

java算法----排序----(6)希尔排序(最小增量排序)
1 package log;2 3 public class Test4 {4 5 /**6 * java算法---希尔排序(最小增量排序)7 * 8 * param args9 */ 10 public static void main(String[] args) { 11 // 需要排序的数组 12 int arr[] { 49, …

你知道dos和cmd之间的关系以及区别吗?
含义 dos 英文disk operation system,意思是磁盘操作系统是微软系列操作系统之一,dos是一个独立的操作系统,dos对操作人员的要求是比较高的,操作者需要记住很多的命令,并利用命令编写大量的命令行,来完成一…

挨踢项目求生法则-团队建设篇
摘要: 知道什么是挨踢项目吧?什么!不知道?那IT项目知道了吧?为了不让客户踢、不让老板踢、项目组成员之间不互相踢,俺为大家分享一些减少被踢机会的心得体会。就算不能让项目成功,也至少不会死得…

【jquery】文档操作
属性 1、attr() 获取、设置属性、设置多个属性 代码实现: alert($("div:first").attr("value")); $("div:first").attr("value","这是第一个div"); $("div:last").attr({value: "这是最后一…

基于流式的md5计算-多线程下载工具Lwget介绍
在数据传输的时候,我们希望实现以下目标:1. 使用多线程传输,加速下载速度2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件3. 支持断点续传4. 支持http协议和ftp协议5. 代码尽可能的简单,利于维护 实…

SpringCloud系列一:SpringCloud的简介和架构
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。 一、SpringCloud简介 SpringCloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之…

SUST_ACM_2019届暑期ACM集训热身赛题解
问题A:Hello SUST! 知识点:基本输入输出 C/C: 1 #include <stdio.h>2 3 int main() {4 int n;5 scanf("%d", &n);6 while(n --) {7 printf("Hello SUST!\n");8 }9 return 0; 10 } View Code问…

修改默认的个人站点
1、将模板页加入到里面 在地址C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\MySiteLayouts中找到 LayoutFiles.xml 然后将master复制到这个文件夹下 最后在LayoutFiles.xml加入如下代码: <Module Name"Mast…

【java】暑期需要复习的操作
实现分页查询 将网页输入的数据存入数据库 将每个jsp文件都需要的代码抽离出来 添加jquery 全选操作 引入jstl 实现全选功能

11迭代器模式
图片来自head first 设计模式,仅供学习之用 事实证明光看是没有用的,实践才能出真知,迭代器模式没有我想想的那么简单,写了个小例子才发现自己的理解并不深刻。例子是仿照head first的。迭代器是一个完整的类,作用是遍…

吴裕雄--天生自然 高等数学学习:高阶偏导数
转载于:https://www.cnblogs.com/tszr/p/11165379.html

【数据库】兴唐第二十六节课作业
一、设计购物车表、支付信息表和订单表 思路: 购物车中有: 商品名、价格、生产日期、 保质期(shelf life)、生产厂家。 支付信息中有: 商品名、 价格、 件数、 总价 订单信息有: 发货时间、订单号、预计到…

递归与非递归转换(栈知识应用)
下面例题是一次作业中遇到的,很值得体味,与大家共享下。 递归代码: 1 long f(long m,long n) 2 { 3 long sum; 4 if(m0) sumn1; 5 else if(n0) sumf(m-1,1); 6 else kf(m-1,f(m,n-1)); 7 return sum; 8 } 用递归来做很明了&a…

Silverlight 游戏开发小技巧:角色升级特效
这次我们将使用Projection完成一些有趣的RPG游戏中常用的特效:升级和传送点特效,我们不需要请特效师制作复杂绚丽的特效,而是只需要他们提供关键的几张图片或者设计样式,如果了您有本领教会他们使用Blend来做特效,那就…

使用jQuery开发messager消息框插件
1、插件使用 首先引入jquery库,然后引入dialog.js、dialog.css、messager.js、messager.css,如下: 1 <script type"text/javascript" src"js/jquery/jquery-1.7.2.min.js"></script> 2 3 <script type&q…

Data - 深入浅出学统计 - 上篇
本文是已读书籍的内容摘要,少部分有轻微改动,但不影响原文表达。 :以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/引言:统计无处不在 统计值无处不在。我们伴随着统计值…

android 布局之RelativeLayout(相对布局)
android 布局分为LinearLayout TableLayout RelativeLayout FreamLayout AbsoluteLayout. 常用的有LinearLayout,TableLayout,RelativeLayout ,这几个布局不会应该手机屏幕大小而有变化。通常我们使用HVGA 大小的屏幕(320*480). 接下来我们学习RelativeLayout. 原文…

【js】实现分页查询操作的步骤
1、将CSS的代码复制到goodList.jsp 2、引入common 代码实现: <% include file"../common/common.jsp"%> 3、引入jstl 代码实现: <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core"%> 注意&…

Orchard:如何生成Hello World模块
在Orchard架构介绍中对Orchard的一些架构内容进行了介绍,下图是Orchard自带的一些模块, 本篇讲解一下如何扩展Orchard来生成我们的第一个模块。 介绍 Orchard构建在ASP.NET MVC之上,MVC是一个应用模式,我在信息系统开发平台OpenE…

通过域名访问自己部署到服务器上的项目
通过域名访问自己部署到服务器上的项目 如何不输入项目名端口号直接访问java web项目 1、省略输入端口号的步骤 在Linux的下面部署了tomcat,为了安全我们使用非root用户进行启动,但是在域名绑定时无法直接访问80端口号。众所周知,在unix下&am…

【java】异常的分类
注: 1、exception是人工可以修复的,但error的话很少出现,如果出现就无能为力了。 2、我们将所有派生于EXCEPTION和ERROR的类的所有异常称为(unchecked)非受查异常,其余为受查(checked…

【免费软件测试视频-0013】——Loadrunner9.0 SLA Analysis
LR9.0---SLA Analysis http://www.3atesting.com/mv/bencandy.php?fid15&id16转载于:https://www.cnblogs.com/umain/archive/2008/09/28/1301310.html