JS 点击事件学习总结
废话篇:
在我们编写无论什么网页内容的时候我们总是或多或少的要接触到点击事件这一范畴的,写过几个简短的demo和网页之后,感觉自己对电机事件一类的东西了解也更为的清楚了,之前写过很多零零散散的东西现在整理一下,方便之后的阅读和复习。
正文片:
1、PC上的点击事件。
PC端用户通过鼠标和网页进行互动操作,此时我们用鼠标一类的事件的情况会有许多。因此在PC端我们多用mouse事件或者click事件来进行相关逻辑的编写。
事件的发生依照事件六中的先后顺序来进行的,对于鼠标垫额交互事件来说,事件的先后顺序是,mouseDown -> mouseMove -> mouseUp -> click -> dblclick
mouseDown事件标示的是当鼠标点击按下的时候需要执行的处理机制。
mouseMove事件是在鼠标点击还没有放开的情况之下,用户拖动鼠标时触发的事件。3
mouseUp事件是当我们放开鼠标按键的时候触发的事件。
click事件是当我们完成一次点击的时候所触发的事件。
dblclick标示的是双击事件,当点击完成两次之后会调用绑定的相关函数。当然执行顺序在click之后。 P.S.当同一个元素绑定了点击事件和双击事件的时候,我们想要把当前的两种事件的处理机制分开来的话。如果不做特殊处理的话,可能会在每一次想要执行双击事件之前都会执行一次单击事件。此时我们可以使用延迟函数setTimeout,并在调用dblclick事件的时候把在单击事件中的延时函数所返回的等待队列中的内容删除,如此的话,就可以实现控制当双击的时候不会执行单机逻辑。
由上面的事件执行顺序来看,我们在对一个元素绑定事件的时候要注意事件的处理过程的先后顺序,这样才能更好的控制事件之间的逻辑关系。
2、移动端点击事件。
在移动端上面使用点击事件的时候和PC端上会有些不同,因为移动端上面,我们的交互方式是不相同的,移动端使用电容屏,所以在绑定顶相关的时候的时候,我们应该注意的是移动端的事件的顺序是touchstart -> touchmove -> touchend -> click -> dblclick
touchstart表示的是当用户的手指点击当前的屏幕的时候触发的事件。
touchmove表示的是当前的用户手指点击并滑动之后时触发的事件。
touchend标示的是当前的用户手指离开触摸屏之后触发的事件。
其他的两个时间和上面的提到的事件是相同的情况。
当时在移动端和PC端有一点是不相同的,因为同一时间有多个手指同时触碰,所以需要有一个列表来记录触碰的先后顺序和坐标。
在触碰事件种会有如下的其他参数:
1.touches列表,存储的是当前屏幕上所有触屏手指的集合列表。
2.targetTouches列表,存储的是绑定了事件的元素上面的触屏手指的集合列表。
3.changeTouches列表,存储的是触摸事件触发的时候改变了的触摸手指的集合列表(e.g.当我们用一个手指触屏的时候,changeTouches列表中存储的是,当前这一手指触摸到屏幕的对象信息,而当我们保持第一个触摸手指的位置不变的时候,而在用另外两个手指触摸屏幕的时候,changeTouches将会存储的信息是两外两个触摸事件的对象,而没有第一个手指触摸时间的对象了,因为它没有改变。)。
由上可知,当我们需要获取手机端显示坐标的时候我们需要用当前的事件来获取touches列表中的一项数据,touches[0],然后才可以用这一数据来获取当前的点击位置。
3、事件冒泡。
当当前元素绑定了点击事件的时候,而其父级元素也绑定了同样的事件的时候,当自己元素事件触发了的话,父级元素事件也会在同一时间内触发。并且其执行顺序在当前元素下一执行事件之前。
例如,当我们为一个元素设置了mouseDown(touchstart)和click事件的时候,同时在为其父级元素设置了相同的事件,当我们可以发现,在子元素的mouseDown或者是touchstart事件发生的时候父级元素的mouseDwon(touchstart)事件也会在子元素当前事件发生之后立即触发。而后子元素的click事件再出发之后,父级元素click事件一并触发。
其实我们同样也是可以阻止事件冒泡的发生的,通过event.stopPropagation()调用来阻止。
当然,其实浏览器对于一些监听事件是有默认处理的,例如在移动端touchmove有内容滚动的默认事件,我们可以通过event.preventDefault()来进行阻止的。
以上就是我现在学习到的一些内容,如有补充,后期更新。
JS 点击事件学习总结的更多相关文章
- 项目遇到的小问题(关于vue-cli中js点击事件不起作用和iconfont图片下载页面css样式乱的解答)
第一个:关于vue-cli中js点击事件不起作用 在vue的methods方法queryBtnFun()中拼接html和click操作事件的时候,发现点击事件一起未起作用: 后来发现是DOM执行顺序 ...
- JS中点击事件冒泡阻止
JS中点击事件冒泡阻止 解析: 一个div层'out',内含有一个div层'in'.如下: 两个层都绑定了点击事件,但是点击in层的时候,点击事件会出现冒泡现象,同时也会触发out层的点击事件. 但是 ...
- IOS的UIWebView中JS点击事件,需要加入cursor:pointer;属性才可以
IOS的UIWebView中JS点击事件,需要加入cursor:pointer;属性才可以. Android的WebView可以支持外链样式,js文件:IOS则需要改为内嵌样式和JS文件.
- js点击事件防止用户重复点击执行
点击事件里给button标签加一个自定义属性,存上次点击时间 追问: 求详细代码,JS 真心的没怎么做过 追答: <input type="button" id=&quo ...
- js点击事件,数字累加
<!doctype html><html lang="en"><head> <meta charset="utf-8&qu ...
- JS - 点击事件排除父级标签
点击事件排除父级标签,这里使用的是stopPropagation()方法.event.stopPropagation(); 对了,这里还用了解除click事件,unbind. 下面这篇博文,介绍挺全的 ...
- JS点击事件的重叠处理(多个点击事件出现冲突)
最近开发遇见了一个这个样的情况,一个button在一个div中,点击buton是一个事件,点击大的div也是一个事件,但是由于button在div中,点击button会把两个事件都执行了,但是我们想点 ...
- js点击事件在苹果端失效的问题
在安卓机上,我们随意定义点击事件也能够在找到点击的元素,但是在苹果端上就是不行,怎么点击都没有效果.这是因为在苹果机上window禁止了手指误点功能,必须解除这一功能,或者给点击事件指引某个元素上绑定 ...
- 转:js点击事件在ios中失效的3种解决方案
ios中不允许将点击事件绑定在document或者body上,如果绑定上的话将会失效.解决方案: 例如: $(document).on('click', '#generate', function ...
随机推荐
- Codeforces Round #216 (Div. 2)解题报告
又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<]; ,m2=; ;i ...
- JS中showModalDialog 详细使用(转)
基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDial ...
- Activity学习(一)——状态转变
(转自:http://blog.csdn.net/flowingflying/article/details/6415323) Android很大的应用场景是手机,有一些应用具有特别的优先级别,例如电 ...
- iOS多线程的初步研究(七)-- dispatch对象
谈起iOS的dispatch(正式称谓是Grand Central Dispatch或GCD),不得不说这又是iOS(包括MacOSX)平台的创新,优缺点这里不讨论,只有当你使用时才能真正体会到.我们 ...
- 编程实现linux下的shell
/************************************************************************* > File Name: Kris_shel ...
- Ajax的进阶学习(一)
在Ajax课程中,我们了解了最基本的异步处理方式.本章,我们将了解一下Ajax的一些全局请求事件.跨域处理和其他一些问题. 加载请求 在Ajax异步发送请求时,遇到网速较慢的情况,就会出现请求时间较长 ...
- Windows 回调监控 <一>
在x86的体系结构中,我们常用hook关键的系统调用来达到对系统的监控,但是对于x64的结构,因为有PatchGuard的存在,对于一些系统关键点进行hook是很不稳定的,在很大几率上会导致蓝屏的发生 ...
- ABP集合帖
http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...
- 华为上机:IP地址转换
IP地址转换 描述: IP地址的长度为32,即有2^32-1个地址.IP地址一般采用点分十进制表示法,例如"192.168.1.1".IP地址也可以直接用一个32位的整数进行表示. ...
- 欧拉工程第56题:Powerful digit sum
题目链接 Java程序 package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; im ...