gpt4 book ai didi

javascript - iOS Safari 过度滚动 : Pulling down vs. 弹跳

转载 作者:行者123 更新时间:2023-11-29 01:07:26 25 4
gpt4 key购买 nike

我和我的团队正在开发一个带有固定 header 的网络应用程序,该 header 不会滚动。

为了处理 iOS 上的过度滚动,我们需要检测负向滚动,并将固定标题再次重新定位为静态,使其与页面的其余部分一起滚动。
我们通过绑定(bind) jQuery 来实现这一点将处理程序滚动到窗口:

$(window).scroll(function() {
if ($(window).scrollTop() < 0) {
// position static header postioning in order
// let the header behave correctly when overscrolling
}
});

当手动下拉(拖动)页面时,这很有效。但正如每个 iOS 用户都知道的那样,当页面从向下位置再次加速滚动时,一旦到达顶部,页面就会弹起(过度滚动)。

在这种情况下,我们的滚动处理不起作用。

目前我可以想象两个原因,为什么会出现这种不同的行为:

  • 快速向上滚动并使页面弹跳对于 Safari 的 JS 引擎来说太快了,无法确保流畅的处理
  • 从技术上讲,向上滚动时弹跳与手动下拉网页是否相同?关于 $(window).scrollTop() ?

有没有人提示如何使我的滚动处理在这两种情况下都能正常工作?

最佳答案

如果 CSS 中的 position:fixed 不适合你,那么你应该尝试制作一个绘制循环,并且每次循环运行时,你放置一个水平偏移量等于您的用户滚动了多远。

基本上,如果 CSS 不起作用,你的 JS 应该如下所示:

var head = document.getElementById("header");
//head now has our header
head.style.position = "relative";
//and now, we can manipulate it's position
function draw(){
head.style.top = window.pageYOffset;
//all that's left to do is do this each and every frame.
}

如果您不知道如何进行绘制循环,请使用以下代码:

var frameRate = 60;
var frameCounter = (function(){
var counter = 0;
return function(){
counter ++;
if(counter > frameRate/1000){
counter -= frameRate/1000;
draw();
}
}
})();
setInterval(frameCounter, 1);

关于javascript - iOS Safari 过度滚动 : Pulling down vs. 弹跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com