DOM事件模型分为捕获和冒泡。
事件捕获:外=>内找监听函数
事件冒泡:内=>外找监听函数
target是用户触发的,currentTarget是开发者用于监听的
target.addEventListener(type('click'), listener(fn()), useCapture(boll));
boll如果不填/为false就默认是冒泡,为true就是捕获
代码示例:
[js.jirengu.com/zirozujedu/…]:
如果每个level.addEventListener的第三个参数都为true的话,那么是从外向内移除x的class的,反之则是从内向外。
如果同时有捕获和冒泡,那么先执行捕获,在执行冒泡。ps:冒泡可以阻止
如果是同级元素,即监听的元素就是用户触发的元素,那么按顺序执行(即先监听的执行)
捕获不可取消,冒泡可以
e.stopPropagation()可以中断冒泡
有些元素无法阻止冒泡,如scroll event
Cancelable为No即代表无法阻止。那我就是不信,非要阻止滚动该怎么实现呢?
x.addEventListener('scroll',(e)=>{e.stopPropagation}) 这样是不行哒
可以换一种思路,阻止不了scroll,阻止wheel的默认事件不就行了
x.addEventListener('wheel',(e)=>{e.preventDefault})果然滚不了了
然后可以在css中隐藏滚动条::webkit-scrollbar{width:0}就行了
在手机页面可以使用x.addEventListener('touchstart',(e)=>{e.preventDefault})来实现