参考资料:
http://www.qianduan.net/css3-pointer-event-description.html
http://css-tricks.com/including-navigation-code-on-all-pages-even-with-current-navigation-highlighting/
http://www.cnblogs.com/meteoric_cry/archive/2011/07/03/2096971.html
http://www.vinylfox.com/forwarding-mouse-events-through-layers/
之前考虑怎么在html中做事件穿透,比如有两个同层次的div,如何让底层的div能执行监听事件。
今天偶然看到css有这么一个参数可以设置:pointerEvents
解决这样的问题有以下方案:
1、纯使用CSS的属性pointer-events,设置其为none (默认为auto)
优点:无需额外的代码
缺点:不支持IE(IE不支持此属性,IE9是否支持有待考评..)
2、捕捉事件获取鼠标的位置X、Y,然后触发层级较低元素的相应事件 (平时我们用调试工具选取页面中的元素,高亮显示的区域就是依据这个原理)
优点:兼容各浏览器
缺点:需要编写Javascript,效率并不高
这样获取有也有两种处理方法:
循环获取每一个元素的位置,然后对比鼠标的X、Y,效率低,不推荐;这里推荐使用elementFromPoint(浏览器都支持),直接传入X、Y,便可直接获取相应的DOM元素
我的DEMO:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script src="jquery-1.9.1.min.js"></script>
<style>
#mainPage div {
position:absolute;
color:#999;
}
#slideshowWrap {
top:200px;
left:0px;
width: 200px;
height:200px;
z-index: 0;
background-color:blue;
}
#scrollWrap {
z-index: 2;
top:0px;
left:0px;
width:200px;
height:400px;
background-color:yellow;
pointer-events: none;
}
#slideshowBtn {
z-index:1;
width: 20px;
height:20px;
top:200px;
left:180px;
background-color:black;
}
#scrollBtn {
top:380px;
left:90px;
width: 20px;
height:20px;
background-color:black;
pointer-events: auto;
}
</style>
<script>
$(document).ready(function () {
var TOP_INDEX = 99,
scrollWrap = document.getElementById("scrollWrap"),
slideshowWrap = document.getElementById("slideshowWrap");
// scrollWrap.addEventListener("click", function (event) {
// console.log("scroll click");
// });
slideshowWrap.addEventListener("click", function (event) {
console.log("slideshow click");
});
$("#scrollBtn").on("click", function () {
console.log("scroller btn click");
});
// $("#slideshowBtn").on("click", function () {
// $("#slideshowWrap").css("z-index", 1);
// $("#slideshowBtn").css("z-index", 1);
// $("#scrollWrap").css("z-index", TOP_INDEX);
// });
// $(document).on("click", "div", function (event) {
// console.log("document click");
// console.log(event.currentTarget);
// });
// $("div").on("click", function (event) {
// console.log(event.target);
// })
});
</script>
</head>
<body>
<div id="mainPage">
<div id="slideshowWrap">slideshow</div>
<div id="scrollWrap">scroll
<div id="scrollBtn"></div>
</div>
<div id="slideshowBtn"></div>
</div>
</body>
</html>
分享到:
相关推荐
当pointer-events的值设置为none之后,浏览器将不会获得鼠标在当前位置的层上的点击事件,而造成鼠标穿透的效果!下面就来为大家展开讲解一下使用CSS的pointer-events属性实现鼠标穿透效果的神奇技巧
2. `pointer-events: none` - 当设置此值时,元素将不再响应鼠标事件,而是让事件穿透到其下方的元素。这在需要用户与元素下方的内容进行交互时非常有用。例如,在地图应用中,若有一个覆盖在地图上的层,设置该层的...
当`.pointer`类存在时,`.overlay1`和`.overlay2`的`pointer-events`属性被设置为`none`,从而使鼠标能够穿透这两个div,进而触发下方链接和`<span>`的事件。 这个例子展示了`pointer-events`在解决层叠元素交互...
总结来说,Vue.js的事件修饰符和JavaScript的`event.stopPropagation()`提供了阻止事件冒泡的机制,而CSS的`pointer-events`属性则允许我们控制元素是否响应鼠标事件,从而避免事件穿透问题。在实际开发中,根据具体...
在示例中,`.overlay`类的元素设置了`pointer-events: none`,这意味着当用户尝试点击这个覆盖层时,事件不会被这个元素捕获,而是继续向下传递到下面的链接元素。这使得用户可以点击原本被遮挡的链接。 为了实现这...
当`pointer-events:none`时,元素将变得对鼠标事件透明,即实现了“穿透”效果。而在Unity3D等游戏引擎中,可能需要修改碰撞检测设置或自定义事件处理逻辑。 在图形用户界面设计中,鼠标穿透的使用需谨慎,因为它...
- 使用 CSS 的 `pointer-events` 属性:将 `pointer-events` 设置为 `none` 可以让 `div` 层不响应鼠标事件,这样点击时就不会穿透 `div` 到 `select` 元素。但是,记得在需要交互的地方恢复 `pointer-events` 的...
通过设置`pointer-events`属性为`none`,可以使元素不响应鼠标事件,从而允许鼠标穿透。例如: ```css .穿透元素 { pointer-events: none; } ``` 3. **编程接口**:在桌面应用开发中,如Windows Forms或WPF,...
在Android系统中,触摸事件(Touch Events)是用户与设备交互的主要方式,它涉及到了复杂的事件传递机制。本文将深入探讨Android的触摸事件处理流程,包括事件的产生、分发以及处理过程,以实例的形式帮助开发者理解...
`在不需要交互的元素上,然后在弹出层上设置`pointer-events: auto;`。 通过上述方法,我们可以有效地解决`div`弹出层的定位问题,创建出符合预期且用户体验良好的弹出层。在实际开发中,要结合具体项目需求和...
通过设置`pointer-events: none`,我们可以使遮罩层不响应鼠标事件,从而达到阻止背景操作的效果。如果需要在遮罩层上添加可点击的元素,那么只需要为这些特定元素设置`pointer-events: auto`即可。 在实际应用中,...
当`pointer-events`设置为`none`时,元素将忽略所有的鼠标事件,鼠标指针会穿透该元素并作用于其下的元素。这对于创建覆盖层或者透明元素特别有用,因为即使这些元素位于其他内容之上,也不妨碍用户与底层元素交互。...
- `pointer-events`属性:让水印元素不响应鼠标事件,防止点击穿透,如`pointer-events: none;`。 - `backdrop-filter`属性:在某些浏览器中,可以使用模糊或饱和度等滤镜效果,使得截图时水印变得模糊。 - `...
`:如果想要让用户能够点击覆盖层下的元素,可以添加此属性,使得鼠标事件穿透覆盖层传递至下面的元素。 JavaScript也可能在这个滤镜效果中发挥作用,例如,当用户点击某个按钮时,通过JavaScript动态添加或删除...
一种方法是创建一个全屏的遮罩层,覆盖整个页面,并设置其`pointer-events`属性为`none`,或者设置页面元素的`disabled`属性: ```html ()">禁用页面 ; top: 0; left: 0; width: 100%; height: 100%; background...
2. **非阻塞点击穿透**:在vue-particles组件上设置CSS属性`pointer-events: none;`,使其不捕获任何鼠标事件,允许点击事件穿透到下面的按钮元素。 3. **自定义点击事件处理**:如果点击效果是必要的,可以监听全局...
4. **CSS样式调整**:为内层元素设置`pointer-events: none`使其不响应点击事件,但请注意这可能会影响其他交互。 在`wxapp_multiFormId`项目中,可能已经提供了相应的处理机制来防止这种问题,通过分析源码,我们...
为了允许文本被选中或点击,可以使用CSS的`pointer-events`属性,将其设为`none`,这样鼠标事件可以穿透覆盖层作用在下面的文字上。 以下是简化的HTML结构、CSS样式和JavaScript代码示例: ```html <!-- 多个...