废话篇:

在我们编写无论什么网页内容的时候我们总是或多或少的要接触到点击事件这一范畴的,写过几个简短的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 点击事件学习总结的更多相关文章

  1. 项目遇到的小问题(关于vue-cli中js点击事件不起作用和iconfont图片下载页面css样式乱的解答)

     第一个:关于vue-cli中js点击事件不起作用 在vue的methods方法queryBtnFun()中拼接html和click操作事件的时候,发现点击事件一起未起作用: 后来发现是DOM执行顺序 ...

  2. JS中点击事件冒泡阻止

    JS中点击事件冒泡阻止 解析: 一个div层'out',内含有一个div层'in'.如下: 两个层都绑定了点击事件,但是点击in层的时候,点击事件会出现冒泡现象,同时也会触发out层的点击事件. 但是 ...

  3. IOS的UIWebView中JS点击事件,需要加入cursor:pointer;属性才可以

    IOS的UIWebView中JS点击事件,需要加入cursor:pointer;属性才可以. Android的WebView可以支持外链样式,js文件:IOS则需要改为内嵌样式和JS文件.

  4. js点击事件防止用户重复点击执行

    点击事件里给button标签加一个自定义属性,存上次点击时间 追问: 求详细代码,JS 真心的没怎么做过 追答:   <input type="button" id=&quo ...

  5. js点击事件,数字累加

    <!doctype html><html lang="en"><head>    <meta charset="utf-8&qu ...

  6. JS - 点击事件排除父级标签

    点击事件排除父级标签,这里使用的是stopPropagation()方法.event.stopPropagation(); 对了,这里还用了解除click事件,unbind. 下面这篇博文,介绍挺全的 ...

  7. JS点击事件的重叠处理(多个点击事件出现冲突)

    最近开发遇见了一个这个样的情况,一个button在一个div中,点击buton是一个事件,点击大的div也是一个事件,但是由于button在div中,点击button会把两个事件都执行了,但是我们想点 ...

  8. js点击事件在苹果端失效的问题

    在安卓机上,我们随意定义点击事件也能够在找到点击的元素,但是在苹果端上就是不行,怎么点击都没有效果.这是因为在苹果机上window禁止了手指误点功能,必须解除这一功能,或者给点击事件指引某个元素上绑定 ...

  9. 转:js点击事件在ios中失效的3种解决方案

    ios中不允许将点击事件绑定在document或者body上,如果绑定上的话将会失效.解决方案: 例如:  $(document).on('click', '#generate', function ...

随机推荐

  1. 图片放大镜插件 Cloud Zoom v3.1

    Cloud Zoom是一个图像放大jQuery插件,效果堪比Magic Zoom.相对于流行jQZoom插件,Cloud Zoom体积小,有更多的功能和更强大的跨浏览器兼容性. 猛击这里查看演示DEM ...

  2. IE8下兼容rgba颜色的半透明背景

    在工作中做一个图片半透明遮罩时发现在IE8下不兼容 一查再知道IE8不支持rgba颜色,再搜搜兼容性方法,没想到这么快就解决了. 先说说rgba的含义: r代表red,g代表green,b代表blue ...

  3. MYSQL注入天书之stacked injection

    第三部分/page-3 Stacked injection Background-8 stacked injection Stacked injections:堆叠注入.从名词的含义就可以看到应该是一 ...

  4. MySQL数据库数据类型之集合类型SET测试总结

    MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...

  5. php调试工具firephp

    PHP调试有很多中方法.今天给大家推荐的是 FirePHP 这个工具,是基于firefox的一个组件.Firephp组件安装地址.使用之前需要先安装下这个组件.完了还需要down一个FirePHP的包 ...

  6. OneApm,NewRelic

    https://newrelic.com/ http://www.csdn.net/article/2013-03-25/2814631-new-relic-mobile-app-real-time- ...

  7. hdu 4061 A Card Game

    思路: 分析:假设取的牌顺序是一个序列,那么这种序列在末尾为1时是和取牌序列一一对应的,且是符合“游戏结束时牌恰好被取完”的一种情况. 简证:1.在序列中,任一数 i 的后一个数 j 是必然要放在第 ...

  8. node操作mysql数据库

    1.建立数据库连接:createConnection(Object)方法       该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php ...

  9. vim使用详解

    1 插入类命令 i               // 在当前字符前插入 I               // 在当前行首插入 a               // 在当前字符后写入 A         ...

  10. hdu 1848 Fibonacci again and again (初写SG函数,详解)

    思路: SG函数的应用,可取的值为不连续的固定值,可用GetSG求出SG,然后三堆数异或. SG函数相关注释见代码: 相关详细说明请结合前一篇博客: #include<stdio.h> # ...