Javascript 未发生滚动事件时运行函数

Javascript 未发生滚动事件时运行函数,javascript,jquery,Javascript,Jquery,我有一个动画,我想在两种情况下启动: 当页面首次加载且浏览器未自动滚动时 当页面刷新且浏览器自动将用户滚动回其以前的位置时,该位置(scrollTop())小于300 如果出现以下情况,我不希望事件触发: 用户刷新页面,浏览器自动滚动到大于300的位置 检测浏览器自动滚动的唯一方法(据我所知)是触发以下代码: $(window).load(function(){ $(this).one('scroll', function(){ var pagePosition = $(

我有一个动画,我想在两种情况下启动:

  • 当页面首次加载且浏览器未自动滚动时
  • 当页面刷新且浏览器自动将用户滚动回其以前的位置时,该位置(
    scrollTop()
    )小于
    300
  • 如果出现以下情况,我不希望事件触发:

  • 用户刷新页面,浏览器自动滚动到大于
    300
    的位置
  • 检测浏览器自动滚动的唯一方法(据我所知)是触发以下代码:

    $(window).load(function(){
        $(this).one('scroll', function(){
            var pagePosition = $('html').scrollTop();
        }
    });
    
    $(window).load(function(){
        // run on original page load (no scroll)
        myAnimation();
    
        // run on page refresh w/ auto-scroll
        $(window).one('scroll', function(){
            var pagePosition = $('html').scrollTop();
    
            if( pagePosition < 300 ) {
                myAnimation();
            }
        }
    }
    
    但是,如果我运行此代码:

    $(window).load(function(){
        $(this).one('scroll', function(){
            var pagePosition = $('html').scrollTop();
        }
    });
    
    $(window).load(function(){
        // run on original page load (no scroll)
        myAnimation();
    
        // run on page refresh w/ auto-scroll
        $(window).one('scroll', function(){
            var pagePosition = $('html').scrollTop();
    
            if( pagePosition < 300 ) {
                myAnimation();
            }
        }
    }
    
    $(窗口).load(函数(){
    //在原始页面加载时运行(无滚动)
    myAnimation();
    //运行页面刷新并自动滚动
    $(窗口)。一('滚动',函数(){
    var pagePosition=$('html').scrollTop();
    如果(页面位置<300){
    myAnimation();
    }
    }
    }
    
    动画将在原始页面加载时触发两次。一次在页面加载时触发,另一次在用户开始滚动时触发


    我需要一些方法来检测浏览器是否在加载时自动滚动,如果没有,则运行动画一次。

    这与仅在滚动位置小于300时才在加载时滚动不同,例如:

    $(window).load(function(){
        setTimeout(function() {
            var pagePosition = $('body').scrollTop();
    
            if( pagePosition < 300 ) {
                myAnimation();
            }
        }, 0);
    }
    
    $(窗口).load(函数(){
    setTimeout(函数(){
    var pagePosition=$('body')。scrollTop();
    如果(页面位置<300){
    myAnimation();
    }
    }, 0);
    }
    
    请注意,您应该从
    元素而不是
    来测量
    滚动顶部
    ,因为某些浏览器总是将
    的滚动位置指定为
    0


    工作

    这在不同的浏览器之间似乎真的不一致。在启动滚动事件之前,Chrome总是给出0,Firefox立即给出位置,Safari每次都给出0,滚动或否。啊,应该查看我复制和粘贴的内容。您的代码中有错误。将更新我的答案。仍然没有。所有浏览器报告“0”,而不考虑自动滚动。如果您的页面很复杂,您可以添加一个
    setTimeout()
    ,让浏览器有时间滚动。更多更新和工作示例,但如果您需要更多帮助,我将不得不开始收取每小时的费用。