Javascript 在iOS';s Safari导致上下滚动检测出现问题
我有以下Javascript代码:Javascript 在iOS';s Safari导致上下滚动检测出现问题,javascript,ios,safari,Javascript,Ios,Safari,我有以下Javascript代码: $(窗口)。滚动(函数(){ if(window.innerWidth lastScrollTop){ //做些事情 其他的 //做一些其他的事情 lastScrollTop=滚动状态; } });在弹回之前,Safari将Y位置旋转到负着陆。可以使用此选项忽略反弹动画中的位置更改 窗口滚动事件触发得非常快。出于性能原因,您不希望直接处理这些事件 下面的示例显示了如何以250ms的间隔检查用户是否已滚动,这很容易提高性能 var didScroll = fa
$(窗口)。滚动(函数(){
if(window.innerWidth lastScrollTop){
//做些事情
其他的
//做一些其他的事情
lastScrollTop=滚动状态;
}
});代码>在弹回之前,Safari将Y位置旋转到负着陆。可以使用此选项忽略反弹动画中的位置更改
窗口滚动事件触发得非常快。出于性能原因,您不希望直接处理这些事件
下面的示例显示了如何以250ms的间隔检查用户是否已滚动,这很容易提高性能
var didScroll = false;
$(window).scroll(function() {
didScroll = true;
});
// interval scroll handler
setInterval(function() {
if ( didScroll ) {
didScroll = false;
scrolled();
}
}, 250);
var lastScrollTop = 0;
function scrolled() {
var scrollStatus = window.pageYOffset;
if (scrollStatus < lastScrollTop) {
//user scrolled up
} else if ( lastScrollTop >= 0) {
//user scrolled down
}
lastScrollTop = scrollStatus;
}
var didcroll=false;
$(窗口)。滚动(函数(){
didcoll=true;
});
//间隔滚动处理程序
setInterval(函数(){
如果(滚动){
didcoll=false;
滚动();
}
}, 250);
var lastScrollTop=0;
函数滚动(){
var scrollStatus=window.pageYOffset;
如果(滚动状态<上次滚动顶部){
//用户向上滚动
}else if(lastScrollTop>=0){
//用户向下滚动
}
lastScrollTop=滚动状态;
}
或者,您可以通过重置仅在滚动完成后调用scrolled()函数的超时来缓解性能问题
var timer;
$(window).scroll(function() {
if ( timer ) clearTimeout(timer);
timer = setTimeout(function(){
scrolled();
}, 100);
});
var lastScrollTop = 0;
function scrolled() {
var scrollStatus = window.pageYOffset;
if (scrollStatus < lastScrollTop) {
//user scrolled up
} else if ( lastScrollTop >= 0) {
//user scrolled down
}
lastScrollTop = scrollStatus;
}
var定时器;
$(窗口)。滚动(函数(){
if(定时器)清除超时(定时器);
计时器=设置超时(函数(){
滚动();
}, 100);
});
var lastScrollTop=0;
函数滚动(){
var scrollStatus=window.pageYOffset;
如果(滚动状态<上次滚动顶部){
//用户向上滚动
}else if(lastScrollTop>=0){
//用户向下滚动
}
lastScrollTop=滚动状态;
}
我明白了!我还怀疑延迟是由我的滚动脚本造成的。谢谢你指出这一点。你认为我也应该setInterval
来调整我的resize
脚本吗?那么lastScrollTop
初始值呢?仍然0
?是的,lastScrollTop应初始化为0,请参见我的编辑。我不确定调整大小脚本的作用,但是如果它是通过滚动触发的,那么是的。对不起,我所说的“调整大小”是指类似于$(window).resize(function(){//do something})代码>又学到了一些新东西:设置超时
:-D谢谢!它甚至比setInterval
更好。