核心内容:多种事件的运用场景解析
开始了
1吹牛逼
2吹牛逼
3也许我别来,你自然无恙
A:复杂多样的鼠标事件
应用:鼠标事件很多,平时用个点击就以为用过那就大错特错了,鼠标事件不仅有原生的点击,双击,移动,进入,移出,悬浮,可以打印event里面的type查看,还有一些比如jq封装的事件,这些事件而且会相互触发,比如移动move是最容易被其他事件触发,或者原生的拖拽事件,不仅有自己的事件,而且会触发元素上的很多其他事件。
B:为什么会这样呢?
解析:第一本身不同事件类型但是相近的鼠标操作就会同时触发,第二在多层dom结构中的事件,由于本身事件的冒泡机制,由最底层的元素向上冒泡,到父元素到document到window,以至于类似事件不同方法但是同时触发
C:怎么解决
办法:比如现象一:只想触发最底层的元素的点击事件,不触发其父元素的点击事件,解决方案阻止冒泡。现象二:类型相近事件相互触发,导致方法重复执行,解决方案在易促发的事件的方法中可以加入条件判断,是否已经执行过相同操作,如果有要么直接return,如果还有其他操作判断,可以将可能重复的那个操作进行重置。现象三:原生方法事件以及简单事件相互交叉影响导致最后鼠标事件失灵,定义的方法不能执行,页面不可控制,解决方案单个功能实现后进行方法设为null如dom.onclick=null,然后设置dom对象释放捕获。
event事件实在太多太复杂了,正如人生一样,可是有时候多一点细心多一点耐心,没事多打打断点和测试,我们会看得更加清晰,正如我若别来,你自然无恙,越是纠结,越是沉沦,往往简单最好。
事件人生,人生事件,简单复杂,复杂简单,一正一反,经历了自然会成长,花香了自然蝶飞舞。
【需要注意】虽然focus与blur不冒泡,但是却可以在捕获阶段侦听到它们。
只定义了div2即棕色的那个div的事件
【解释enter与leave】:当鼠标由粉移向棕色时,显示enter,鼠标由棕移向绿时,不显示leave与enter。当移出粉色时,显示leave。
【解释over与out】:当鼠标由粉移向棕色时,显示over,鼠标由棕移向绿时,显示out在显示over,鼠标由绿移向棕时,显示out载显示over。为什么会显示呢?是因为事件冒泡,由棕移向绿时会触发div3的over事件,但是div3并没有定义,所以向上冒泡到div2。所以会显示div2的over事件。
【总结】mouseenter与mouseleave是IE提出的事件,不冒泡。但是mouseover与mouseout事件则通过简单的e.stopPropagation()也无法避免冒泡的现象。
1、如图首先在一个文件夹下创建index.html文件。
2、然后用可编辑文本文件的软件打开index.html文件,index.html的初始内容如图。
3、js的鼠标事件主要有onclick:单击事件ondbclick:双击事件onmouseover:鼠标移入事件onmouseout:鼠标移出事件onmousedown:鼠标按下事件onmouseup:鼠标松开事件。首先实现鼠标左键单击和双击的js代码如图。
4、编辑完index.html文件后,用浏览器打开index.html文件,效果如图。当鼠标左键单击span时显示"触发鼠标单击事件",双击span时显示"触发鼠标双击事件"。
5、接着实现鼠标的移入和移出事件。如图修改index.html文件。
6、最后实现鼠标的点下和松起事件。如图修改index.html文件。
7、修改完index.html文件后,用浏览器打开index.html文件,效果如图。