前端有两个盒子 hover盒子A 除了这个盒子以外的其他地方覆盖遮罩层,鼠标离开盒子A遮罩层消失 鼠标hover盒子B同样可以像盒子A一样触发遮罩层 请用vue2举个例子
时间: 2024-05-04 08:15:13 浏览: 23
当然,我很了解这个问题。在Vue2中,可以通过v-if指令和一个computed属性来实现这种效果。假设你已经将盒子A和盒子B分别绑定到两个组件上,你可以这样写代码:
```html
<template>
<div>
<my-box @mouseenter.native="showMaskA" @mouseleave.native="hideMaskA" />
<my-box @mouseenter.native="showMaskB" @mouseleave.native="hideMaskB" />
<<div v-if="showMask" class="mask" @click="hideMask" />
</div>
</template>
<script>
export default {
computed: {
showMask() {
return this.maskA || this.maskB
}
},
data() {
return {
maskA: false,
maskB: false
}
},
methods: {
showMaskA() {
this.maskA = true
},
hideMaskA() {
this.maskA = false
},
showMaskB() {
this.maskB = true
},
hideMaskB() {
this.maskB = false
},
hideMask() {
this.maskA = false
this.maskB = false
}
}
}
</script>
```
以上代码中,我们通过computed属性将maskA和maskB两个变量合并成一个showMask变量,然后用v-if指令来根据showMask的值显示或隐藏遮罩层。这样可以确保只有在两个盒子都没有被hover时才会隐藏遮罩层。同时,我们还定义了四个方法来分别处理鼠标进入/离开盒子A和盒子B的事件,以及点击遮罩层的事件。
现在你可以通过给<my-box>组件传入不同的props来渲染不同的盒子,从而达到你需要的效果。顺便一提,这个组件中的@click.native是为了在遮罩层和盒子B之间添加一个缓冲层,避免在鼠标离开盒子B时立即隐藏遮罩层出现闪烁的情况。