内部滚动条影响外部滚动条问题

1,292 阅读1分钟

场景

页面header部分鼠标进入会出现下拉menu,有的menu可以滚动有的没有overflow,但是menu滚动到底/没有overflow的区域滚动鼠标都会导致页面body的滚动;造成menu收起的情况

若是直接让menu出现的时候 使得 body.overflow = 'hidden'的话,滚动条的消失和隐藏会造成页面的抖动。

解决方案

  1. 抖动问题: 修改浏览器滚动条样式,让滚动条宽度缩小 / 让滚动条一直存在
  2. 内部滚动条对body影响:
    • 内层滚动容器设置 overscroll-behavior: auto contain;让内层滚动到底之后不会让外部滚动容器继续滚动
  3. 内部无滚动时滚动鼠标:
    • 由于内部无滚动条,overscroll-behavior无用

    • document.querySelector('body').addEventListener( "mousewheel", PASSIVE, { passive: false } );

    • 但是需要在合适的时候 removeEventListener "mousewheel"