【发布时间】:2018-05-05 16:48:40
【问题描述】:
这是我将在下面详细描述的情况的完整代码:https://codepen.io/Adam0410/full/MGXjaz/
codepen中包含的javascript(问题的核心)如下:
var collapsed = false;
$(window).scroll(function(){
var scroll = window.pageYOffset || document.documentElement.scrollTop;
if (scroll > 207 && !collapsed) {
$("#header").css({
position: "fixed",
height: "50px",
"line-height": "50px"
});
$("#content").css("margin-top", "207px");
$(document).scrollTop(scroll - 50);
collapsed = true;
} else if (scroll < 155 && collapsed) {
$("#header").css({
position: "static",
height: "257px",
"line-height": "257px"
});
$("#content").css("margin-top", "0");
$(document).scrollTop(scroll + 50);
collapsed = false;
}
});
我正在尝试制作一个大标题,它是文档流的一部分,然后当您向下滚动经过它时,它会变成一个较小的固定标题。我希望在这个过程中用户滚动的动作是流畅的。
如果您在移动设备(或使用 chrome 的设备工具栏)上查看具有平滑滚动的笔并在标头更改的断点周围缓慢滚动,您可以看到它完全平滑。
但是,如果您在桌面(再次使用 chrome 或任何其他浏览器)上查看它,则使用滚轮滚动以 100 像素为增量进行。出于这个原因,如果您再次滚动到标头更改的断点,您会发现它并不平滑。
发生这种情况是因为 100 像素滚动不会立即发生,并且在更改文档的 scrollTop 的过程中,100 像素滚动动画会被取消。一旦我设置了 scrollTop 属性,有什么方法可以检测并恢复这个滚动动画?
【问题讨论】:
-
您应该在 Codepen 或直接在 Stackoverflow 上创建您的问题的完整示例。
-
我已经这样做并相应地编辑了问题。
标签: javascript jquery scroll