使用`scroll-behavior:smooth`时检测滚动完成

Nik*_*nov 17 javascript css

当滚动到页面上的元素时,检测到的最佳方法是什么?规范说"滚动框在用户代理定义的时间段内使用用户代理定义的定时功能以平滑的方式滚动.用户代理应该遵循平台约定,如果有的话."

我想我可以等到一段时间没有任何滚动事件:

__PRE__

有一个更好的方法吗?


(2017-11-23)在相关的说明中,Firefox 58现在只有一个chrome-only scrollend事件.

Nik*_*nov 6

唯一可行的选择似乎是等待,直到不再发生任何scroll事件:

let timer;
window.addEventListener( 'scroll', () => {
    clearTimeout( timer );

    timer = setTimeout( () => {
        callback();
    }, 300 );
}, { passive: true } );
Run Code Online (Sandbox Code Playgroud)

更新:Firefox 109和Chrome 110现在有一个scrollend事件:https://caniuse.com/mdn-api_element_scrollend_event