【问题标题】:Getting the current scroll position in Chrome using scrollTop() on page load/refresh在页面加载/刷新时使用 scrollTop() 在 Chrome 中获取当前滚动位置
【发布时间】:2013-07-31 07:47:12
【问题描述】:

在 Chrome 中运行以下命令总是返回 0:

$(window).on('load', function(){
     console.log($(window).scrollTop());
});

通过控制台运行相同的命令:

$(window).scrollTop()

返回正确的数字。 (即:843)

在 StackOverflow 上有很多关于这个问题的问题,但没有一个给我一个正确的工作答案或替代方案。 我很茫然……

【问题讨论】:

  • 您是在谈论加载指向页面上命名锚点的 URL,例如:example.com/#section 吗?

标签: jquery google-chrome scrolltop


【解决方案1】:

scrollTop() 返回滚动条的当前垂直位置。通常在页面加载时,滚动条位于0 位置。如果控制台打印出其他内容,那么您或浏览器必须在调用该函数之前向下滚动。

如果您使用命名锚点或从滚动位置刷新页面,您可以将处理程序绑定到仅触发一次的滚动事件 - 在页面加载时:

$(window).on('scroll', function() {
    console.log( $(this).scrollTop() );
});

【讨论】:

  • 这就是问题说页面加载/刷新的原因。因为通过刷新浏览器会保留其滚动位置,而这正是我所关注的。
  • 我澄清了答案,指出该解决方案还涵盖了某些浏览器在刷新时具有的自动滚动功能。
  • @David 我发现这个问答非常有用,但我意识到如果我将处理程序绑定到 scroll 事件,它总是返回 0(因为浏览器没有滚动,所以你需要首先滚动查看值变化)。如果我将它绑定到load 事件,它会返回我所在的滚动位置(Chrome v30、Firefox v24)。
  • 非常好的和聪明的解决方案,用于获取浏览器的后退按钮缓存的滚动值,谢谢。
【解决方案2】:

获取当前滚动位置In page的方法有很多种

  1. 首先获取pageYOffSet let verticalScrollOffset = window.pageYOffset;

    然后设置 window.scrollTo(0,verticalScrollOffset);

  2. 如果你需要两个侧位并设置那么

    let scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
    let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
    
    window.scrollTo(scrollLeft,scrollTop);
    
  3. 使用 ViewportScroller click here to know more this.viewportScroller.scrollToPosition(this.viewportScroller.getScrollPosition());//对我没有帮助

  4. 理想解决方案对我有用,我只是在加载页面之前保存 verticalScrollOffset(YaxisSrollPosition) 或在任何常量变量或本地存储中刷新。然后在刷新或加载页面后使用该位置

    let verticalScrollOffset = window.pageYOffset || document.documentElement.scrollTop;
    
    $("html, body").animate({ scrollTop: verticalScrollOffset }, "slow");//slow Or fast option
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多