前端开发中,难免会遇到一些元素被其他元素遮挡,比如想要点击box2,刚好又被box1元素挡住,无法实现点击效果
<style>
.box1 {
position: absolute;
top: 0;
width: 270px;
line-height: 270px;
z-index: 1;
background-color: rgba(255, 194, 204, 0.5);
}
.box2 {
position: absolute;
top: 0;
width: 100px;
line-height: 100px;
background: skyblue;
}
</style>
<!-- box1将box2完全遮挡住,但是点击事件又是在box2上面 -->
<div class="box1"></div>
<div class="box2" onclick="abc()"></div>
<script>
function abc() {
console.log('box2点击事件');
}
</script>
这时候,就可以使用该属性了:pointer-events,鼠标是否可以穿透当前元素,抵达被覆盖的元素
默认值 | 描述 |
auto | 鼠标可以点击访问该元素,默认值 |
none | 鼠标点击,该元素不做任何响应 |
inherit | 继承父级属性 |
给box1加上pointer-events: none; 这样box2就不会收到box1的遮挡,也能发生鼠标点击事件了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box1 {
position: absolute;
top: 0;
width: 270px;
line-height: 270px;
z-index: 1;
pointer-events: none;
background-color: rgba(255, 194, 204, 0.5);
}
.box2 {
position: absolute;
top: 0;
width: 100px;
line-height: 100px;
background: skyblue;
}
</style>
</head>
<body>
<!-- box1将box2完全遮挡住,但是点击事件又是在box2上面 -->
<div class="box1">box1</div>
<div class="box2" onclick="abc()">box2</div>
<script>
function abc() {
console.log('box2点击事件');
}
</script>
</body>
</html>
如果一个鼠标点击事件不能发生,首先应检查它是否被遮挡,然后可以使用pointer-events属性。然后检查是否有其它的事件冲突,比如mousedown等。
在子元素中,绑定一个阻止冒泡的点击事件 @click.stop
,可以解决点击子元素触发父元素点击事件的问题。