Touch组件实现原理
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组件实现原理的更多相关文章
- sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析
昨天无意中在网上看到一篇讲解sencha touch组件选择器的文章,名为 Sencha touch 2通过Ext.ComponentQuery.query查找组件. 里面对组件选择器的效率讲解完全反 ...
- reactnative 原生组件通信原理
http://www.csdn.net/article/2015-11-27/2826345-compare-React-Native-with-ExMobi 原生组件通信原理 React Nativ ...
- atitit. web组件化原理与设计
atitit. web组件化原理与设计 1. Web Components提供了一种组件化的推荐方式,具体来说,就是:1 2. 组件化的本质目的并不一定是要为了可复用,而是提升可维护性. 不具有复用 ...
- Openstack组件实现原理 — Nova 体系结构
目录 目录 前文列表 Nova体系结构 虚拟机实例化流程 前文列表 Openstack组件部署 - Overview和前期环境准备 Openstack组建部署 - Environment of Con ...
- Openstack组件实现原理 — OpenVswitch/Gre/vlan
目录 目录 前文提要 Neutron 管理的网络相关实体 OpenVswitchOVS OVS 的架构 VLan GRE 隧道 Compute Node 中的 Instance 通过 GRE 访问 P ...
- js touch触屏原理分析
之前我们做过许多触屏的特效,那么,今天,我们来分析下js的触屏原理.事实上,大家百度一下js touch基本上可以找到这文章“指尖下的js ——多触式web前端开发之一:对于Touch的处理”,我想这 ...
- 分享动态拼接Expression表达式组件及原理
前言 LINQ大家都知道,用起来也还不错,但有一个问题,当你用Linq进行搜索的时候,你是这样写的 var query = from user in db.Set<User>() ...
- .Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败
我是在本地32位操作系统+vs2010+office2007做创建并下载Excel,ppt文件的操作没有问题,发布到64位系统的服务器上报错,最开始报错:: 1:Retrieving the COM ...
- [SF] Symfony 组件 BrowserKit 原理
直接看下面的注释中针对每一个文件的作用说明. <?php /** * BrowserKit - Make internal requests to your application. * * I ...
随机推荐
- eclipse安装Hadoop1.1.2版本开发插件
Hadoop1.1.2版本没有直接适合Eclipse的安装插件,需要手动打包jar文件. 我的系统配置: VMware Workstation10 CentOS-6.5-i386 hadoop-1.1 ...
- Jsp_demo:自定义标签
Jsp自定义标签: 1.继承SimpleTagSupport,重写doTag(). 2.在WEB-INF/ 下配置**.tld文件 3.Jsp页面引入自定义标签:<%@ taglib uri=& ...
- 【转】shell 教程——01 Shell简介:什么是Shell,Shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...
- Shell数组:shell数组的定义、数组长度
Shell在编程方面比Windows批处理强大很多,无论是在循环.运算. bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利 ...
- c#+ArcEngine中的IGroupLayer的用法
转自羊子雄起原文c#+ArcEngine中的IGroupLayer的用法 在AE开发中,我们知道axMapControl.LayerCount能获取图层的数量,但是这种方法不能获取到图层组里面的图层, ...
- java转c#代码工具集合
1#:Java语言转换器助手地址:http://www.microsoft.com/en-us/download/details.aspx?id=14349 2#:Octopus的.NET转换器地址: ...
- ffprobe使用具体解释
夹 1. 语法 2. 描写叙述 3. 选项 3.1 流指示符 3.2 通用选项 3.3 音视频选项 3.4 主选项 4. 写入器 4.1 默认值 4.2 compact, csv 4.3 flat 4 ...
- CGI与FastCGI 转
CGI与FastCGI 当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断 ...
- LabVIEW设计模式系列——状态机
标准:1.状态用枚举自定义类型,便于统一管理修改.2.一般地应该有:Initialize,Idle,Stop,Blank状态.3.Initialize进行一些初始化的操作:Idle一种过渡状态,用于和 ...
- PHP多维数组的魅力
让我们来体验一下多位数组的魅力吧! 多维数组就是一个数组里面包含一个或多个数组,这就是多维数组.下面用多维数组来编写一个小案例(代码在图片下面): <meta http-equiv=" ...