<div id="app">
<div @click="btn0" style=" width:300px;height:300px; border:1px solid red;background:#606060">0
<div @click.capture="btn1" style=" width:200px;height:200px; border:1px solid red;background:#CCC">1
<div @click="btn2" style=" width:100px;height:100px; border:1px solid red;background:#f5f5f5">2
<button @click="btn3">3</button>
</div>
</div>
</div>
</div>
<script src="https://cn.vuejs.org/js/vue.min.js"></script>
<script>
let vm=new Vue({
el:'#app',
data:[],
methods:{
btn0(){
alert('btn0')
},
btn1:function(){
alert('btn1')
},
btn2:function(){
alert('btn2')
},
btn3:function(){
alert('btn3')
}
},
})
</script>
点击按钮之后事件触发的顺序
btn1->btn3->btn2->btn0
如果把 capture
放在 btn2上面,则事件触发的顺序变成了:
btn2->btn3->btn1->btn0
最后总结的优先级规律是:
- 设置了capture的
- 真正被点击的
- 结束了capture之后,依照冒泡顺序
- 已经出发的事件(capture),在冒泡阶段会忽略不再触发
这个结论对不对,为什么会这样?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…