google-chrome - 将 scrollTop 动画到窗口 onLoad 中的较低位置后,Chrome 跳回页面顶部
问题描述
将我们的网站从 jQuery 1.10.2 升级到 jQuery 3.3.1 后,我们遇到了以下问题。
我们有这个 JavaScript 让页面在加载后跳转到位置 500。
$(window).on("load", function () {
$("body, html").animate({ scrollTop: 500 }, 1);
});
这在 Firefox 中运行良好。
但是,在 Chrome 中,滚动到此位置后,它会向上滚动到页面顶部。当我在 Chrome JavaScript 调试中单步执行时,向下滚动后,这种向上滚动发生在 jquery-3.3.1 文件中的以下代码处:
// Animations created synchronously will run synchronously
function createFxNow() {
window.setTimeout( function() {
fxNow = undefined;
} );
return ( fxNow = Date.now() );
}
我如何 (1) 防止 Chrome 向上滚动,或 (2) 将我的代码附加到稍后的页面循环挂钩上,诸如此类$(window).on("completelyLoaded")
?
解决方案
我最终通过使用两个嵌套$(document).ready
语句解决了这个问题:
$(document).ready(function () {
$(document).ready(function () {
$("body, html").animate({ scrollTop: 500 }, 1);
});
});
这显然是有效的,因为准备好的回调是按照它们分配的顺序调用的。当调用外部就绪回调时,所有其他脚本应该已经分配了它们的就绪回调。因此,现在分配您的就绪回调(内部回调)将导致您成为最后一个。换句话说,它之所以有效,是因为 jQuery 按照添加的顺序执行事件处理程序,并且在您的事件处理程序中添加事件处理程序是尽可能晚的。
推荐阅读
- php - SimplesamlPHP 无限重定向
- java - 如何仅使用列名从 excel 中获取列值?
- angular - 下拉列表中的选定项目未在 Angular 2/4 中显示
- jquery - 引导选择无法正确更新选定的选项
- google-chrome - 如何删除所有重复的 URL 并仅保留 Google Chrome 历史记录中的最后一次访问?
- c++ - Qt 为多行文本绘制轮廓
- azure - 在 java sdk 中配置虚拟机期间的 OS 磁盘类型支持
- elasticsearch - Elasticsearch 6.3:未知插件 Marvel-agent
- php - 无法使用 PHP 将图像从 android 插入 SQL Server 数据库
- r - 跳过多次迭代运行中 AUC = 1 的 ROC 曲线的平滑步骤