- Vue.js核心技术解析与uni-app跨平台实战开发
- 袁龙
- 705字
- 2023-08-25 11:34:36
1.6 事件修饰符
事件修饰符主要用来处理DOM事件细节,如阻止事件冒泡、取消事件默认行为、修饰鼠标、修饰键盘等。
1.6.1 鼠标按键修饰
以鼠标修饰符举例,通常单击时可触发事件,我们可以将其设置成右击或者单击鼠标滚轮时触发事件,代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9423.jpg?sign=1739504140-35T40zQlemZW14GQVlZ5veH4sECbImfr-0-7d17fd6eae02c5478846b462629d8c4a)
在“@click”后面加“.right”,此时必须右击才能触发show方法,也可以将其设置为单击鼠标滚轮时触发,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9425.jpg?sign=1739504140-fhvt1NLWhEE5CLzGMLvklvJ182OjwB3q-0-09a2bea433f87850ab52727d94c71d16)
“.middle”表示必须单击鼠标滚轮才能触发show方法。
1.6.2 系统修饰符
常用的系统修饰符有.ctrl、.alt、.shift,其表示按住修饰键才能触发事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P26_9427.jpg?sign=1739504140-pt7KOskZjmVxBPUOrbP7Z9nqDG4UFIXS-0-35ba869f2b91a60a0745c8042ee44675)
上述代码必须在单击的同时按住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=1739504140-DENJFeVpQvCwdW8UXTKRiOZXXEIIWJOa-0-f6b94a9f8582e5a0bc671ecff309b742)
上述代码中,两个div盒子属于嵌套关系,并且都有事件,当单击main盒子时,首先会触发show方法,然后触发sayhi方法,这叫作事件冒泡,.stop可以阻止事件冒泡,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9431.jpg?sign=1739504140-nLUdaun889ug0H7DPWFhEoqru48T1Uju-0-209d9e6f4fab9ae08a43ed654727c04b)
此时单击main盒子,只会触发show方法。
.capture使用捕获模式,先触发外侧div事件,再触发内部div事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9433.jpg?sign=1739504140-JZjWxTKs6wpN3Jauxsgb891Rwqm3PNnW-0-914237060585ff95e9edd156cb848e15)
此时单击main盒子,首先触发的是sayhi方法,再触发show方法。
.self单击元素本身触发事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P27_9435.jpg?sign=1739504140-QqF9wGwMtFCa1DS28BLjxL5Iuhr8fXmy-0-6ae3502105584da734307476caebbe63)
此时单击main盒子只能触发show方法,要触发sayhi方法则必须单击content盒子。
.self和.stop的区别:.self只能阻止元素自身冒泡,如果还有其他嵌套事件,会继续冒泡;.stop是阻止整个事件冒泡。
.prevent阻止默认事件,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P28_9436.jpg?sign=1739504140-4CGA2ZF0PNYwlP9w2Tip9iYdJcsDCtzp-0-a0f40c991ece93940b7f0b615aa8c5a4)
此时单击“百度”,并不会跳转到百度页面,.prevent阻止了a标签的跳转功能,打开控制台,控制台会调用show方法。
.once修饰符只生效一次,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P28_9438.jpg?sign=1739504140-pRNLaffBcazXzldO4RPhRVRisNTmAfnZ-0-33d5fa8be7c0d74044b612c1650d3106)
第一次单击“百度”,.prevent会阻止a标签的默认跳转,所以不会进行页面跳转。但是第二次单击“百度”页面,则会正常跳转,加上.once之后,.prevent修饰符只生效一次。