如何在页面 onload 事件之后获取页面的滚动顶部?

发布于 2024-08-27 04:32:31 字数 745 浏览 9 评论 0原文

我知道如何获取页面的 scrollTop ,我使用这个简单的 JS 函数(代码复制过来):

function GetScrolledTop() 
{
   //I never work in IE quirkmode, I always use DOCTYPE as 1st line, so I don't need to test for document.body.scrollTop
   return self['pageYOffset'] || document.documentElement.scrollTop; 
}

这有效,我的问题如下:我尝试将其添加到页面 onload 事件

<body onload="alert(GetScrolledTop());">

中页面加载我得到零(这是有道理的),但问题是我得到零即使我滚动页面然后重新加载它而不触摸滚动条。

浏览器似乎是这样做的:

  1. 加载页面
  2. 调用我的 GetScrolledTop() (所以显然显示零),
  3. 然后将页面滚动到之前的位置。

你知道如何在第3步之后获取scolledTop吗? 我的意思是如何获得 scrolledTop 浏览器滚动页面后? (也许不使用计时器)

I know how to get the scrollTop of a page, I use this simple JS function (code copied around):

function GetScrolledTop() 
{
   //I never work in IE quirkmode, I always use DOCTYPE as 1st line, so I don't need to test for document.body.scrollTop
   return self['pageYOffset'] || document.documentElement.scrollTop; 
}

This works and my problem is the following: I tried to add it in the page onload event

<body onload="alert(GetScrolledTop());">

On page load I get ZERO (which make sense), but the problem is that I get ZERO even if I scroll the page and then reload it without touching the scrollbar.

It seems like the browser does:

  1. loads page
  2. calls my GetScrolledTop() (so obviously shows ZERO)
  3. then scrolls the page to where it was before.

Do you know how to get the scolledTop after the step 3?
I mean how to get the scrolledTop AFTER the browser scrolled the page?
(maybe without using a timer)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

仅此而已 2024-09-03 04:32:31

如果不使用计时器,可能就不行。但是您也许可以使用延迟为 0 毫秒的计时器,该计时器将在线程空闲时执行该函数,同时仍然看起来是即时的:

<body onload="window.setTimeout(function () { alert(GetScrolledTop()); } , 0);">

编辑 - 认为还值得一提的是< a href="http://www.quirksmode.org/dom/events/index.html#t021" rel="nofollow noreferrer">大多数浏览器支持onscroll 事件,该事件应在窗口滚动后触发。

Probably not without using a timer. But you might be able to use a timer with a 0ms delay, which would execute the function when the thread becomes idle, whilst still appearing to be instant:

<body onload="window.setTimeout(function () { alert(GetScrolledTop()); } , 0);">

EDIT - Thought it might also be worth mentioning that most browsers support the onscroll event, which should fire after the window scrolls.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文