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()
,让浏览器有时间滚动。更多更新和工作示例,但如果您需要更多帮助,我将不得不开始收取每小时的费用。