Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在iOS';s Safari导致上下滚动检测出现问题_Javascript_Ios_Safari - Fatal编程技术网

Javascript 在iOS';s Safari导致上下滚动检测出现问题

Javascript 在iOS';s Safari导致上下滚动检测出现问题,javascript,ios,safari,Javascript,Ios,Safari,我有以下Javascript代码: $(窗口)。滚动(函数(){ if(window.innerWidth lastScrollTop){ //做些事情 其他的 //做一些其他的事情 lastScrollTop=滚动状态; } });在弹回之前,Safari将Y位置旋转到负着陆。可以使用此选项忽略反弹动画中的位置更改 窗口滚动事件触发得非常快。出于性能原因,您不希望直接处理这些事件 下面的示例显示了如何以250ms的间隔检查用户是否已滚动,这很容易提高性能 var didScroll = fa

我有以下Javascript代码:

$(窗口)。滚动(函数(){
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
更好。