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 ...
随机推荐
- MSW下wxWidgets的安装与编译
教程摘自网上各大博客.贴吧.论坛,结合自己的实践做了一些实质性的修改. 一.安装 首先从http://sourceforge.net/projects/wxwindows/files/2.8.12/w ...
- 16个最棒的jQuery视差滚动效果教程
今天我们整理了16个最棒的jQuery视差滚动效果教程 , 并附有演示地址,你可以快速的查看教程的效果,或者应用在自己的项目中.希望本文对想要学习或者使用jQuery视差效果的朋友有帮助,慢慢的欣赏吧 ...
- Gradle DSL method found: ‘android()’错误
Gradle DSL method found: ‘android()’错误 和上个错误一样这个也是因为在新版本的Gradle中android()方法已经废弃,但是要注意android()只是在整个项 ...
- MFC ListControl使用方法
在原来博客中有:MF CListControl 简单功能使用 推荐文章:MFC类CtrlList用法 今天又又一次来介绍点新东西:双击击listcontrol 做出响应.当然你能够做的还有非常多,比 ...
- 一行代码解决Android M新的运行时权限问题
Android M运行时权限是个啥东西 啥是运行时权限呢?Android M对权限管理系统进行了改版,之前我们的App需要权限,只需在manifest中申明即可,用户安装后,一切申明的权限都可来去自如 ...
- python中的lambda表达
C++中的lambda表达式与C++11增加标准库,是一个简短的匿名的可调用对象,编译器会将其转化为一个匿名类的对象.lambda表达式的最大特点就是简短灵活.调用方便.它不须要处理非常复杂的逻辑.通 ...
- linux之ioctl函数解析
[lingyun@localhost ioctl_1]$ ls ipconfig.c [lingyun@localhost ioctl_1]$ cat ipconfig.c /*********** ...
- 动态jsp页面转PDF输出到页面
最近工作中遇到不少问题.总结一下.这段代码主要功能是将一个生成JSP页面转发成PDF输出到页面 需要利用ITEXT String html = ServletUtils.forward(request ...
- MY_FAVOR_火埃及
- 在iis中mantisbt配置过程
最近需要安装个mantisbt,由于不想再安装个apache服务器,因此直接使用iis作为php解析服务器.同时为了方便管理安装包,将php安装包和扩展包能够独立存放在D:\Program Files ...