2014年巴西世界杯_田径世界杯 - dutugo.com

JavaScript鼠标事件细讲:执行顺序+注意事项+区别比对

在 JavaScript 中,鼠标事件是 Web 开发中最常用的事件类型,本篇算是笔记吧。

鼠标事件:在DOM2.0中,W3C对鼠标事件作了现范,鼠标事件被解析为MouseEvent(我们可以用e.constructor == MouseEvent来判断其是否为鼠标事件。

常见的鼠标事件有

click:单击鼠标左键时发生。当用户的焦点在按钮上并按了 Enter 键时,同样会触发这个事dblclick:双击鼠标左键时发生,如果右键也按下则不会发生contextmenu :弹出右键菜单。focus:获取焦点blur:失去焦点

mouse事件click、dblclick 没有什么好讲的,contextmenu用的也不多讲。重点讲下mouse事件。

focus跟blur不是鼠标事件,但是也是由鼠标触发。focus跟blur的 e.constructor 为FocusEvent

Mouse事件Mouse事件有7种,分别是:

mouseup:鼠标在元素上松开时触发 mouseup 事件。与 click 不同,只要鼠标在元素上松开即触发(左右键都行)。mousedown:鼠标在元素上并按下时触发 mousedown 事件。与 click 不同,只要鼠标在元素上按下即触发(左右键都行)。mouseover:当鼠标位于元素上时触发 mouseover 事件,通常与 mouseout 配合使用。mouseenter:当鼠标位于元素上时触发 mouseenter 事件,通常与 mouseleave 配合使用。mousemove:鼠标在元素上移动时触发 moudemove 事件。mouseout:鼠标在元素上移开时触发 mouseout 事件。mouseleave:鼠标在元素上移开时触发 mouseleave 事件。mouseenter/mouseovermouseover(鼠标覆盖):当鼠标移入元素或其子元素都会触发事件,所以有一个重复触发,冒泡过程。对应的移除事件是mouseoutmouseenter(鼠标进入):当鼠标移入元素本身(不包含元素的子元素)会触发事件,也就是不会冒泡,对应的移除事件是mouseleavemouseenter/mouseover区别点:mouseenter不会冒泡,简单的说,它不会被它本身的子元素的状态影响到.mouseover就会被它的子元素影响到,在触发子元素的时候,mouseover会冒泡触发它的父元素.(想要阻止mouseover的冒泡事件就用mouseenter)

mouseenter/mouseover共同点:当二者都没有子元素时,二者的行为是一致的,但是二者内部都包含子元素时,行为就不同了.

总结就是:

mouseover和mouseenter的异同体现在两个方面:

是否支持冒泡事件的触发时机可见mouseover事件因其具有冒泡的性质,在子元素内移动的时候,频繁被触发,如果我们不希望如此,可以使用mouseenter事件代替之,但是早期只有ie浏览器支持该事件。

结合其对称事件, mouseleave, mouseenter DOM事件的行为方式与CSS :hover 伪类非常相似。

还有就是:mouseover先触发,mouseenter 后触发。离开时,却是 mouseout 先触发,mouseleave后触发

鼠标事件执行顺序

下来看下面代码

代码语言:javascript代码运行次数:0运行复制

dsafsa

看看结果如何

PC端打印顺序为:

mouseover-》mouseenter-》mousemove-》-》mousedown-》focus-》-》mouseup-》click-》mousemove-》mouseout-》mouseleave-》blur

移动端:tochstart -》touchend-》click

这个是普通html元素。但是如果是input呢?

需要注意的是:移动端,普通元素是不会触发 focus 与blur的,只有表单元素才会触发,如input输入框

执行顺序是 tochstart -》touchend-》-》mousedown-》focus-》mouseup-》click-》blur

mousedown、mouseup、click若在同一个元素上按下并松开鼠标左键,会依次触发mousedown、mouseup、click,前一个事件执行完毕才会执行下一个事件若在同一个元素上按下并松开鼠标右键,会依次触发mousedown、mouseup,前一个事件执行完毕才会执行下一个事件,不会触发click事件鼠标按键mousedown左右键按操按下均可触发,那么怎么区分左右键呢?

是左键点击还是右键点击由它的一个叫button的属性判定。以下就是W3C的标准现范:

按下左键按下中键按下右键当然微软是不会妥协的,因为e.button本来就是微软最先实现的,网景用的是e.which,但相对而言,微软的复杂多了。

0:没有键被按下1:按下左键2:按下右键3:左键与右键同时被按下4:按下中键5:左键与中键同时被按下6:中键与右键同时被按下7:三个键同时被按下参考文章:

JS鼠标事件(非常详细) http://c.biancheng.net/view/5944.html

mouseover和mouseenter的区别 https://www.cnblogs.com/psxiao/p/11543333.html

javascript 鼠标事件总结 https://www.cnblogs.com/rubylouvre/archive/2009/08/24/1552862.html

转载本站文章《JavaScript鼠标事件细讲:执行顺序+注意事项+区别比对》,

请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/js/2016_010