滚动和触摸事件为什么推荐加 passive: true?
简答题困难996 次浏览
参考答案与解析
因为 touchstart、touchmove、wheel 的监听函数里可以调用 preventDefault() 阻止滚动,浏览器在不知道你会不会阻止之前,只能先等监听函数跑完再决定滚不滚。主线程一忙,滚动就跟着卡。加上 passive: true 等于提前承诺「我不会阻止滚动」,浏览器就可以不等 JS,直接开始滚动。
速记要点
- 能阻止滚动的事件,浏览器得等 JS 跑完才能滚
- passive 承诺不调用 preventDefault,滚动不用等
- 真正受影响的是 touchstart、touchmove、wheel
- scroll 事件本身不能取消,加 passive 意义不大
- 要禁
