Vue-事件


事件监听(事件绑定)

在Vue中使用v-on:监听事件,语法糖为@
函数有两种写法函数名后面可写可不写(),写了小括号可以传参,不传参时两种写法效果都一样。单个参数不传参打印时为事件对象。

事件触发方法时的参数传递:可以传递普通参数,也可以传递事件对象$event,设置参数不传参时

    <script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.12/vue.js"></script>
</head>

<body>
    <div id="app">
    <button v-on:click="fn">点我打印666</button><br>  
    <button v-on:click="fn2(999)">点我打印999</button><br>
    <button @click="fn2(888)">点我打印888</button><br>
    <button @click="fn3">点我打印msg</button><br>
    <button @click="fn2">点我打印事件对象</button><br>
    </div>
    <script>
        let obj = {
            el: '#app',
            data: {
                msg: "ljy666",
               },
            methods: {
                fn(){
                    console.log(666)
                },
                fn2(el){
                    console.log(el)
                },
                fn3(){
                    console.log(this.msg)
                },
            },
        }
        var vue = new Vue(obj)
    </script>

事件修饰符

Vue认为方法应只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。所以引入了事件修饰符来处理DOM事件。

  • .stop 阻止冒泡,阻止从当前元素经过的所有冒泡行为

script代码

    <script>
        let obj = {
            el: '#app',
            data: {
                msg: "ljy666",
               },
            methods: {
                fn(){
                    console.log(666)
                },
                fn2(el){
                    console.log(el)
                },
                fn3(){
                    console.log(this.msg)
                },
            },
        }
        var vue = new Vue(obj)
    </script>

当我们没有绑定stop时,点击元素时,点击事件会从这个元素的嵌套层级一级一级往上冒泡;
当绑定了stop时,就阻止了从当前元素经过的所有冒泡行为

    <div id="app">
        <div @click="fn" id="div1"><p>点我打印666</p>
        <div @click="fn2(999)" id="div2"><p>点我打印999</p>
            <div @click.stop="fn3" id="div3"><p>点我打印msg</p></div>
        </div>
        </div>
    </div>

在这里插入图片描述
可以看到点击了紫色区域,只执行了当前元素的点击事件

  • .prevent 阻止默认事件
    有些标签会自带事件,比如a标签点击时会跳转页面,此时给事件绑定prevent就不会执行默认事件
<a href="http://www.baidu.com" @click.prevent="fn">点我</a>
  • .capture 添加事件侦听器时让事件在捕获阶段触发
    补充:事件执行顺序是捕获=>目标=>冒泡
    事件默认是在冒泡阶段触发的,当在捕获阶段触发意味着我们点击它的子元素时,设置为捕获阶段触发的父元素会最先执行它的点击事件
<div id="app">
        <div @click.capture="fn" id="div1"><p>点我打印666</p>
        <div @click="fn2(999)" id="div2"><p>点我打印999</p>
            <div @click="fn3" id="div3"><p>点我打印ljy666</p></div>
        </div>
        </div>
    </div>

在这里插入图片描述

  • .self 其他元素的事件触发时 事件链经过它,无论是捕获还是冒泡阶段都不会触发它的事件,
    只有它自己是精准对象才会触发事件, 虽然它自己不会被别人影响,
    但是它自己的事件触发的时候还是会生成事件链经过其他元素,并不阻止继续冒泡到其他元素
 <div id="app">
        <div @click.self="fn" id="div1"><p>点我打印666</p>
        <div @click="fn2(999)" id="div2"><p>点我打印999</p>
            <div @click="fn3" id="div3"><p>点我打印ljy666</p></div>
        </div>
        </div>
    </div>

在这里插入图片描述

  • .once 事件只触发一次,触发完之后,事件就解绑
<div id="app">
        <div @click="fn" id="div1"><p>点我打印666</p>
        <div @click="fn2(999)" id="div2"><p>点我打印999</p>
            <div @click.once="fn3" id="div3"><p>点我打印ljy666</p></div>
        </div>
        </div>
    </div>

在这里插入图片描述
重复点击div3时只打印了一次

  • 多修饰符一起使用:连点
    <div id="app">
        <div @click="fn" id="div1"><p>点我打印666</p>
        <div @click.self.stop="fn2(999)" id="div2"><p>点我打印999</p>
            <div @click="fn3" id="div3"><p>点我打印ljy666</p></div>
        </div>
        </div>
    </div>

在这里插入图片描述
可以看见点击div2时只冒泡了它的事件,点击div3时只冒泡了div3和div2

按键修饰符

Vue的按键修饰符使用v-on:event.xxx,其中event为按键事件,xxx为键码或键码别名,如v-on:keydown.13或v-on:keydown.enter就表示:当按下回车键时才触发keydown方法。

<input type="text" @keydown.enter="fn()">//方式一
<input type="text" @keydown.13="fn()">//方式二

Vue2.x为我们内置了一些常用的键码别名:

 .enter:回车键
 .tab:制表键
 .delete:含delete和backspace键
 .esc:返回键
 .space: 空格键
 .up:向上键
 .down:向下键
 .left:向左键
 .right:向右键

除了上面提到的按键别名,还可以用如下修饰键开启鼠标或键盘事件监听,使在按键按下时发生响应。

.ctrl
.alt
.shift
.meta

与按键别名不同的是,修饰键和 keyup 事件一起用时,事件引发时必须按下正常的按键。
换一种说法(组合键):如果要引发 keyup.alt,必须按下 alt时释放其他的按键;单单释放 alt不会引发事件。

       <input type="text" @keyup.alt.67="fn"> //当我们按住alt在按C时执行fn函数
       <div @click.ctrl="fn3" id="div3"></div>//当我们按住ctrl再点击执行fn3函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H5_ljy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值