DOM 事件机制

84 阅读1分钟

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})来实现