事件在部分区域生效

Posted MKMU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事件在部分区域生效相关的知识,希望对你有一定的参考价值。

文章目录

1. 结论

建议用第一种解决办法

2. 环境

项目版本
@vue/cli5.0.8
vue2.6.11
vuetify2.6.13
nodev14.21.3
npm6.14.18
浏览器Edge

3. 背景

VuetifyCard 组件,一般由 titletext 构成,在绑定点击事件时,既希望保留 Card 本身的点击水波纹效果,又希望此点击效果不在 title 部分生效,而仅仅在 text 部分生效。

4. 解决办法

前提条件,Card 本身绑定要触发的事件

<v-card
	class="card-wrapper"
	color="rgba(6, 20, 54, 0)"
	outlined
	@click="$emit('jump-to-page')"
>

方法一:利用事件修饰符

在 title部分绑定点击事件修饰符 stop

<v-card-title
	class="pa-1"
	style="height: 2vw; cursor: not-allowed;"
	@click.stop
>

在 text 部分绑定点击事件修饰符 prevent

<v-card-text
	class="content"
	style="cursor: pointer;"
	@click.prevent
>

方法二:利用CSS样式

直接在 header 部分使用 CSS 样式 pointer-events: none;,即可实现效果。

<v-card-title
  class="pa-1"
  style="height: 2vw; cursor: not-allowed; pointer-events: none;"
>

position布局影响点击事件以及冒泡获取事件目标

起因:在做一个上传视频的功能时遇到的问题。如下图

上传前:

上传后:

上传后,鼠标划入视频区域,添加提示显示,移出视频区域,添加提示隐藏

视频与添加是同级定位的,且提示语z-index更高,在进行mouseover与mouseout操作时,添加提示语不正常闪烁

问题根因:mouseover生效时,添加提示在视频上方,此时鼠标划入了提示区域,mouseout开始生效。

总结:  元素互相独立,不存在包含于被包含关系时,当整个页面有元素设置position与z-index的值时,为元素绑定事件,只有显示在最上面一层的元素的事件可以起作用。

 

后将提示语包含在了视频代码区域内

此时,将添加提示的position,z-index属性去除,发现取不到子元素

总结:元素存在包含关系时,当父级元素设置了position与z-index的值,子元素也需要设置position的值,不然事件冒泡获取事件目标时,取不到子元素

 

以上是关于事件在部分区域生效的主要内容,如果未能解决你的问题,请参考以下文章

前端开发工具库:包含事件委托,动画处理,以及大部分常用的前端工具

前端jQuery中input绑定回车事件不生效,直接刷新页面的问题

前端开发中失去焦点和获取焦点是啥意思

position布局影响点击事件以及冒泡获取事件目标

Web前端面试题目及答案汇总

web前端的javascript主要用于交互吗