Vue中的事件修饰符

1.prevent:阻止默认事件(常用);

<a href="http://www.baidu.com" @click="showInfo">点我触发事件</a>
<!-- 执行完showInfo事件后,网页会跳转 -->


<a href="http://www.baidu.com" @click.prevent="showInfo">点我触发事件</a>
<!-- 执行完showInfo事件后网页不会跳转 -->

2.stop:阻止事件冒泡(常用);

<div style="height: 50px;background-color: skyblue;" @click="showInfo">
	<button @click="showInfo">点我触发事件</button>
</div>
<!-- 执行完button按钮的showInfo事件后,因为事件冒泡会跟着执行div标签的showInfo事件 -->



<div style="height: 50px;background-color: skyblue;" @click="showInfo">
	<button @click.stop="showInfo">点我触发事件</button>
</div>
<!-- 只执行button按钮的showInfo事件 -->

3.once:事件只触发一次(常用);

<button @click="showInfo">点我触发事件</button>
<!-- 页面渲染完毕后,每次点击button按钮都会触发showInfo事件 -->



<button @click.once="showInfo">点我触发事件</button>
<!-- 页面渲染完毕后,只有第一次点击button按钮会触发showInfo事件 -->
<!-- 如果页面没有重新渲染,再次点击button按钮则不会再触发showInfo事件 -->

4.capture:使用事件的捕获模式;

<div style="padding: 5px;background-color: skyblue;" @click="console.log(1)">
	div1
	<div style="padding: 5px;background-color: orange;" @click="console.log(2)">
		div2
	</div>
</div>
<!-- 点击div2时控制台输出:2  1 -->
<!-- 点击div2时先经过事件捕获,后才是事件冒泡,捕获阶段是由外往内执行的,冒泡阶段是由内往外执行的 -->


<div style="padding: 5px;background-color: skyblue;" @click.capture="console.log(1)">
	div1
	<div style="padding: 5px;background-color: orange;" @click="console.log(2)">
		div2
	</div>
</div>
<!-- 点击div2时控制台输出:1   2 -->
<!-- div1加上了事件修饰符.capture,在捕获阶段就开始执行事件了 -->
<!-- 所以在点击div2时由外往内执行,先执行了div1的事件,再执行div2的事件 -->

5.self:只有event.target是当前操作的元素时才触发事件;

<!-- 事件为
showInfo(e){
	console.log(e.target)
}
-->

<div style="height: 50px;background-color:skyblue;" @click="showInfo">
	<button @click="showInfo">点我触发事件</button>
</div>
<!-- 输出: <button>点我触发事件</button> 
		  <button>点我触发事件</button>  -->
<!-- 当点击button按钮时因为事件冒泡同时触发了div标签的事件 -->



<div style="height:50px;background-color:skyblue" @click.self="showInfo">
	<button @click="showInfo">点我触发事件</button>
</div>
<!-- 输出: <button>点我触发事件</button> -->

<!-- 
div标签的event.target:
<div style="height:50px;background-color:skyblue">
	<button>点我触发事件</button>
</div>

button按钮的event.target:
<button>点我触发事件</button>

当在div标签的事件加上.self事件修饰符后,点击button按钮触发事件,
通俗来说因为此时的event.target是:<button>点我触发事件</button> ,
所以在执行完button按钮的事件后,事件冒泡div标签的事件时,
event.target不是当前操作的元素,所以不执行该事件
-->

6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕;

<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<!-- .passive 修饰符尤其能够提升移动端的性能。 -->
<div v-on:scroll.passive="onScroll">...</div>

总结

<!-- 修饰符可以连续写,如: -->
<a href="http://www.baidu.com" @click.prevent.stop="showInfo">点我提示信息</a>

<!-- 使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。
因此,用 v-on:click.prevent.self 会阻止所有的点击,
而 v-on:click.self.prevent 只会阻止对元素自身的点击。 -->

<!-- 不要把 .passive 和 .prevent 一起使用,
因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。
请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。 -->
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值