![Vue.js核心技术解析与uni-app跨平台实战开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/47216707/b_47216707.jpg)
1.6 事件修饰符
事件修饰符主要用来处理DOM事件细节,如阻止事件冒泡、取消事件默认行为、修饰鼠标、修饰键盘等。
1.6.1 鼠标按键修饰
以鼠标修饰符举例,通常单击时可触发事件,我们可以将其设置成右击或者单击鼠标滚轮时触发事件,代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9423.jpg?sign=1739241896-eBhOOJbDETbvpCB5rgnosXaixCWDAMTy-0-aa6c6f92ac17f7c7c3b1f7073839729b)
在“@click”后面加“.right”,此时必须右击才能触发show方法,也可以将其设置为单击鼠标滚轮时触发,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9425.jpg?sign=1739241896-46EZ6vLIvHWTPOBeWSh3qra0bAJWG5ki-0-353cecdc1345fb9f0601fd1298ab7e0c)
“.middle”表示必须单击鼠标滚轮才能触发show方法。
1.6.2 系统修饰符
常用的系统修饰符有.ctrl、.alt、.shift,其表示按住修饰键才能触发事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9427.jpg?sign=1739241896-YMH4p7EKKlBnEnstwSZBGC1OMgsh6MRU-0-235afbc52ac56c988750ff864e45a366)
上述代码必须在单击的同时按住Ctrl键,才能触发show方法,同理,.alt修饰和.shift修饰的实现方法也是一样的。
1.6.3 事件修饰符
常用的事件修饰符有.stop、.capture、.self、.prevent、.once。
.stop阻止事件冒泡的代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9429.jpg?sign=1739241896-PbcBUIai6Be3UuLMyPMhR4qpb6gnvKA8-0-ff60f0ccf67064b726ad4b8edf26c650)
上述代码中,两个div盒子属于嵌套关系,并且都有事件,当单击main盒子时,首先会触发show方法,然后触发sayhi方法,这叫作事件冒泡,.stop可以阻止事件冒泡,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9431.jpg?sign=1739241896-e58yCCuKYQy48HUKvWOLjXdRYBWBkNJO-0-a54b80a6f593439ce3e37253d96340c3)
此时单击main盒子,只会触发show方法。
.capture使用捕获模式,先触发外侧div事件,再触发内部div事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9433.jpg?sign=1739241896-OIndzLbFggIU8gso83SdKLZDz8lo7j23-0-f5b8cd5223e62f8618e678f98e425e0e)
此时单击main盒子,首先触发的是sayhi方法,再触发show方法。
.self单击元素本身触发事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9435.jpg?sign=1739241896-P8VqvGWiE8TyrcvELjkpQBojFumaNmYn-0-79ca5d8ad50caa67ba353d4c63ad382a)
此时单击main盒子只能触发show方法,要触发sayhi方法则必须单击content盒子。
.self和.stop的区别:.self只能阻止元素自身冒泡,如果还有其他嵌套事件,会继续冒泡;.stop是阻止整个事件冒泡。
.prevent阻止默认事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P28_9436.jpg?sign=1739241896-I0RgEV1rb4IUlTEuYzSKcjaEWPoeBHUb-0-3c32bac1d57cd84aef8f549c5f2c82d3)
此时单击“百度”,并不会跳转到百度页面,.prevent阻止了a标签的跳转功能,打开控制台,控制台会调用show方法。
.once修饰符只生效一次,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P28_9438.jpg?sign=1739241896-hC7jJ6HvtmBc7umXquIS7WaJi18SBANh-0-61ff85d4b419a6391afcec7720778ef4)
第一次单击“百度”,.prevent会阻止a标签的默认跳转,所以不会进行页面跳转。但是第二次单击“百度”页面,则会正常跳转,加上.once之后,.prevent修饰符只生效一次。