pointer-events介绍
pointer-events 属性是一个指针属性,是用于控制在什么条件下特定的图形元素可以成为指针事件的目标,当这个属性设置为none时,可以禁用 HTML 元素的 hover/focus/active 等动态效果,元素则不接收hover、click事件,由他后面的元素进行接收。
1 |
|
针对HTML元素
- none:该元素永远不会成为鼠标事件的 target。但是,当其后代元素的 pointer-events 属性指定其他值时,鼠标事件可以指向后代元素,在这种情况下,鼠标事件将在捕获或冒泡阶段触发父元素的事件侦听器 (鼠标的动作将不能被该元素及其子元素所捕获,但是能够被其父元素所捕获)。
- auto:默认值,表示指针事件已启用;此时元素会响应指针事件,阻止这些事件在其下面的元素上触发。
- inherit:将使用 pointer-events 元素的父级的值。
除去SVG的独有属性,其他是对浏览器来说生效的属性值。
未设置属性pointer-events
未设置属性的情况下,在光标移动到box1可以正常的触发hover,并且移动到box1和box2重叠的部分也是触发box1的hover
1 | <style> |
设置box1属性pointer-events为none
设置属性的情况下,在光标移动到box1无法正常的触发hover,此时hover已经失效,移动到box1和box2重叠的部分则是触发box2的hover
事件传播
父元素如果设置了pointer-event:none 并不意味着父元素上的事件侦听器永远不会被触发,当子元素上设置pointer-event值不是none,那么都可以通过事件传播机制来触发父元素上的事件。
该属性也可用来提高滚动时的帧频。的确,当滚动时,鼠标悬停在某些元素上,则触发其上的 hover 效果,然而这些影响通常不被用户注意,并多半导致滚动出现问题。对body元素应用pointer-events:none,禁用了包括hover在内的鼠标事件,从而提高滚动性能。