Touch组件的实现主要解决了在pc端和移动端拖拽元素的功能。

PC端:

依靠事件: mousedown,mousemove,mouseup的鼠标事件。
过程:

1. mousedown事件中记录当前元素位置信息,对元素绑定mousemove,mouseup事件。
2. mousemove事件函数,在移动元素的时候获取当前鼠标的位置来改变元素位置属性。其中可以计算获取移动时x,y方向最大的值,从而给元素设置一个移动范围。
3. mouseup事件中主要处理取消事件绑定等操作。

移动端:

依靠事件: touchstart,touchmove,touchend,touchcancel事件
过程:

1. touchstart事件中保存当前元素的位置信息,对元素绑定touchmove,touchend,touchcancel事件。在此事件函数加上了代码event.preventDefault()来阻止touch事件的默认动作——滚动屏幕,因为不想让屏幕动来动去。
2. touchmove事件函数,在移动元素的时候从changedTouches数组中获取当前手指接触屏幕的位置,然后改变元素的位置信息。同样也可以设定一个移动范围来控制元素移动。
3. 在touchend, touchcancel中进行取消事件绑定等操作。其中touchend和touchcancel的区别在于,touchcancel是系统的控件影响了touch功能,例如突然弹出一个对话框,这个时候就会触发touchcancel事件。而touchend事件是正常用户移开手指后所触发的事件。

下面补充下关于touch事件的一些知识:

Touch事件流:

touchstart 触摸开始(手指放在触摸屏上)
touchmove 拖动(手指在触摸屏上移动)
touchend 触摸结束(手指从触摸屏上移开)
touchcancel,是在拖动中断时候触发。

三个Touch列表:

1. touches :当前位于屏幕上的所有手指的一个列表。
2. targetTouches :位于当前DOM元素上的手指的一个列表。
3. changedTouches :涉及当前事件的手指的一个列表。

也许你有一个疑问了,在移动端为什么不能用mousedown,mousemove,mouseup事件呢?

移动客户端也是支持mouse事件的。于是做了一个测试,在移动端对一个元素绑定需要的mouse事件,touch事件,click事件,点击或是移动观察事件响应的情况,发现:

1. 三类事件的响应从快到慢顺序为:touch事件 > mouse事件 > click事件。
2. touchmove事件触发时,mouse和click事件就不会触发。
3. 只绑定click事件,稍微有点移动元素的操作下,click事件不被触发。

从上面的测试结果可以发现:
移动客户端是支持mouse,click事件的,但是最好在移动端的时候还是绑定touch事件。这个是客户端针对移动环境下的特殊处理。

Touch组件实现原理的更多相关文章

  1. sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析

    昨天无意中在网上看到一篇讲解sencha touch组件选择器的文章,名为 Sencha touch 2通过Ext.ComponentQuery.query查找组件. 里面对组件选择器的效率讲解完全反 ...

  2. reactnative 原生组件通信原理

    http://www.csdn.net/article/2015-11-27/2826345-compare-React-Native-with-ExMobi 原生组件通信原理 React Nativ ...

  3. atitit.  web组件化原理与设计

    atitit.  web组件化原理与设计 1. Web Components提供了一种组件化的推荐方式,具体来说,就是:1 2. 组件化的本质目的并不一定是要为了可复用,而是提升可维护性. 不具有复用 ...

  4. Openstack组件实现原理 — Nova 体系结构

    目录 目录 前文列表 Nova体系结构 虚拟机实例化流程 前文列表 Openstack组件部署 - Overview和前期环境准备 Openstack组建部署 - Environment of Con ...

  5. Openstack组件实现原理 — OpenVswitch/Gre/vlan

    目录 目录 前文提要 Neutron 管理的网络相关实体 OpenVswitchOVS OVS 的架构 VLan GRE 隧道 Compute Node 中的 Instance 通过 GRE 访问 P ...

  6. js touch触屏原理分析

    之前我们做过许多触屏的特效,那么,今天,我们来分析下js的触屏原理.事实上,大家百度一下js touch基本上可以找到这文章“指尖下的js ——多触式web前端开发之一:对于Touch的处理”,我想这 ...

  7. 分享动态拼接Expression表达式组件及原理

    前言 LINQ大家都知道,用起来也还不错,但有一个问题,当你用Linq进行搜索的时候,你是这样写的 var query = from user in db.Set<User>()      ...

  8. .Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败

    我是在本地32位操作系统+vs2010+office2007做创建并下载Excel,ppt文件的操作没有问题,发布到64位系统的服务器上报错,最开始报错:: 1:Retrieving the COM ...

  9. [SF] Symfony 组件 BrowserKit 原理

    直接看下面的注释中针对每一个文件的作用说明. <?php /** * BrowserKit - Make internal requests to your application. * * I ...

随机推荐

  1. HDU 4737 A Bit Fun 2013成都 网络赛 1010

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4737 题目大意:给定一系列数,F(i,j)表示对从ai到aj连续求或运算,(i<=j)求F(i, ...

  2. fatal error LINK1123:failure during conversion to COFF:file invalid or corrupt

    Visual Studio 2010编译时出现:fatal error LINK1123:failure during conversion to COFF:file invalid or corru ...

  3. oracle2

    为什么选择oracle--性能优越 概述:目前主流数据库包括 微软: sql server和access 瑞典MySql: AB公司mysql ibm公司: db2(处理海量) 美国Sybase公司: ...

  4. careercup-栈与队列 3.3

    3.3 栈就像叠盘子,当盘子叠得太高时,就会倾斜倒下.因此,在真实的世界中,当一叠盘子 (栈)超过了一定的高度时,我们就会另起一堆,再从头叠起.实现数据结构SetOfStacks 来模拟这种情况.Se ...

  5. 基于keepalived对redis做高可用配置---转载

    关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785 功能 ip地址 安装软件 主redis 1 ...

  6. ServletContext对象--三大域对象

    Servlet三大域对象的应用 request.session.application(ServletContext) ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器 ...

  7. C# 分页

    #region 分页 /// <summary> /// 分页 /// </summary> /// <param name="page">当前 ...

  8. order by跟group by 跟having----------------sum() 求和   avg()求平均   count() 求个数--------------like

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoEAAACdCAIAAABEujUmAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWX ...

  9. .NET3.5中的高性能 Socket API

    转载:http://www.cnblogs.com/TianFang/archive/2007/11/09/954730.html 在 .NET Framework 2.0 版本中,System.Ne ...

  10. 第一章 SQL基础

    第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...