![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=1739314931-xf1kzugDaep7ib0pqDvbUrOynHqlwuJW-0-74fa6c00e24273e31d697d7b35d495fc)
在“@click”后面加“.right”,此时必须右击才能触发show方法,也可以将其设置为单击鼠标滚轮时触发,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9425.jpg?sign=1739314931-unjwbfn4907PVddMoECyBIOYIKdVbKft-0-3f8a438f0577dcdc9409e31a201271d3)
“.middle”表示必须单击鼠标滚轮才能触发show方法。
1.6.2 系统修饰符
常用的系统修饰符有.ctrl、.alt、.shift,其表示按住修饰键才能触发事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9427.jpg?sign=1739314931-ooIqaivRgRCVOhalRy5mEHMoUurSpMyE-0-7d58f4532238e4b219e427ca604484f5)
上述代码必须在单击的同时按住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=1739314931-ifVyLe8E7g8pZOzQNlnNuwTXtuUdoR8E-0-62a0fe55bb12f509fcffec53a3fe96ab)
上述代码中,两个div盒子属于嵌套关系,并且都有事件,当单击main盒子时,首先会触发show方法,然后触发sayhi方法,这叫作事件冒泡,.stop可以阻止事件冒泡,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9431.jpg?sign=1739314931-y3HwxYPh2CfjVC1KKhQxJzIUflvPTCFK-0-3710b566192df88239e4a289fb75fe1b)
此时单击main盒子,只会触发show方法。
.capture使用捕获模式,先触发外侧div事件,再触发内部div事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9433.jpg?sign=1739314931-6qflfLYu13lGkQ80d0BPOUeLTB6Ibx60-0-58538009b03476f28549f50c145d004b)
此时单击main盒子,首先触发的是sayhi方法,再触发show方法。
.self单击元素本身触发事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9435.jpg?sign=1739314931-TQRQc6O7R4BRSFOq8azX0SkdwUARRK15-0-f744cdc6234498bfac36c78345265f74)
此时单击main盒子只能触发show方法,要触发sayhi方法则必须单击content盒子。
.self和.stop的区别:.self只能阻止元素自身冒泡,如果还有其他嵌套事件,会继续冒泡;.stop是阻止整个事件冒泡。
.prevent阻止默认事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P28_9436.jpg?sign=1739314931-gmhBlYzMyqYZ3eXTSTxmzpTixsvECzqv-0-6bee368534e790a868a0a5dbb985de50)
此时单击“百度”,并不会跳转到百度页面,.prevent阻止了a标签的跳转功能,打开控制台,控制台会调用show方法。
.once修饰符只生效一次,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P28_9438.jpg?sign=1739314931-6fmmqnopPvF36xtqXF39TVGRvWWCtuGT-0-a4844a69b1d562157475ffd7064b6816)
第一次单击“百度”,.prevent会阻止a标签的默认跳转,所以不会进行页面跳转。但是第二次单击“百度”页面,则会正常跳转,加上.once之后,.prevent修饰符只生效一次。