Vue 2.x 几个常用的事件修饰符及其用法

发布于 2024-09-29 18:19:43 字数 2599 浏览 15 评论 0

.capture 捕获阶段触发事件

<div @click.capture="log(1)" @click="log(5)">
  <div @click.capture="log(2)">
    <a @click.capture="log(3)" @click="log(4)" 
      href="javascript: console.log('6')">
      点击 a 标签,捕获阶段触发事件
    </a>
  </div>
</div>
// 1 2 3 4 5 6

某些标签拥有自身的默认事件,如 a[href="#"] ​, button[type="submit"] ​ 这种标签在冒泡结束后会开始执行默认事件

默认事件虽然是冒泡后开始,但不会因为 stop 阻止事件传递而停止,而是用 prevent

.passive 告诉浏览器,不用查询了,我们没用 preventDefault 阻止默认动作

因为滚动监听过程中,移动每个像素都会产生一次事件,每次都使用内核线程查询 prevent 会使滑动卡顿。
我们通过 passive 将内核线程查询跳过,可以大大提升滑动的流畅度。

浏览器只有等内核线程执行到事件监听器对应的 JavaScript 代码时,才能知道内部是否会调用 preventDefault 函数来阻止事件的默认行为,所以浏览器本身是没有办法对这种场景进行优化的。

这种场景下,用户的手势事件无法快速产生,会导致页面无法快速执行滑动逻辑,从而让用户感觉到页面卡顿。

这里一般用在滚动监听,@scoll,@touchmove 。

如果设置了 passive 为 true,同时又阻止默认行为,阻止是不生效的

// 阻止鼠标滚轮事件
document.body.addEventListener('wheel', function (e) {
  e.preventDefault()
}, { passive: false }) // passive 参数不能省略,用来兼容 ios 和 android
// 移动端控制 body 的滚动
function bodyScroll(event){
  event.preventDefault()
}
function scrControl(t){
  if(t === 0){ //禁止滚动
    document.body.addEventListener('touchmove', this.bodyScroll, { passive: false })
  }else if(t === 1){ //开启滚动
    document.body.removeEventListener('touchmove', this.bodyScroll, { passive: false })
  }
}
<div @touchmove.passive>
// 丝滑般的滚动
</div>

.native 将原生事件绑定到组件

只能用到组件上面,不能用到普通的标签上面

.sync 双向数据流

传统写法

<child :title="title" @updateTitle="updateTitle"></child>
updateTitle (value) {
    this.title = value
},
// child
<button @click="updateTitle">修改 title</button>
updateTitle () {
    this.$emit('updateTitle', '哈哈')
},

sync 写法

<child :title.sync="title"></child>
// child
<button @click="updateTitle">修改 title</button>
updateTitle () {
    this.$emit('update:title', '哈哈')    // 必须 emit update:title 这个方法
},

.self

event.target 是当前元素自身时触发处理函数(即事件不是从内部元素触发的)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
23 人气
更多

推荐作者

謌踐踏愛綪

文章 0 评论 0

开始看清了

文章 0 评论 0

高速公鹿

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

热情消退

文章 0 评论 0

白色月光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文