Chrome触发滚动事件

4

这是简单的代码

window.onload = function () {
    window.addEventListener('scroll', function () {
        alert('asd');
    });
};

当您在Firefox中刷新滚动页面时,您不会看到警报,但在Chrome中有时会触发警报,有时不会。同一页面,同一滚动,只是多次刷新。
问题是如何避免在Chrome中在刷新后加载时触发滚动事件?
问题在于,DOMContentLoaded可以解决此问题,但我有一个带有坐标的阻止动画(滚动然后固定),并且使用DOMContentLoaded时坐标是错误的。
附言:不允许使用jQuery。
附言2.
    if ('scrollRestoration' in history) {
        history.scrollRestoration = 'manual';
    }

并非固定解决方案,但是可以采用变通方法。

3个回答

2

请使用以下内容:

var tFn = function (){
    alert();
}
document.onreadystatechange = function (){
    if ( document.readyState == ("complete") ) {
        setTimeout(function(){
            window.onscroll = tFn;
        },100);
    }
}

您能解释一下为什么这是必要的吗?这和“onload”有什么区别?谢谢。 - posfan12

1
你可以通过设置标志来跟踪初始滚动,并检测页面实际上是否没有滚动:
window.onload = function () {
    var isFirstTime = true;
    window.addEventListener('scroll', function () {
        if (isFirstTime) {
            isFirstTime = false;
            if (window.scrollY === 0) return;
        }
        alert('asd');
    });
};

0

尝试下面的代码

<script>
window.onscroll = function() {
console.log('Scrolling');

};

</script>

这与问题有什么关联? - Damien Ingrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接