HTML/Javascript:记住滚动与窗口大小无关

发布于 2024-12-05 09:49:40 字数 311 浏览 1 评论 0原文

我有一个在线阅读书籍的网页。我想保存文档中的位置,以便当用户继续阅读时,他会从之前所在的位置开始。

我可以使用 window.pageYOffset 之类的东西来获得滚动,但这取决于浏览器窗口的大小。换句话说,如果您使窗口变窄,相同的文本将出现在不同的滚动条上(参见图片中的示例)。

所以我需要想出一种独立于窗口大小的测量滚动的方法。有什么想法吗?

注意:我只需要它在基于 mozilla 的浏览器上工作。

问题示例

提前致谢

I've got a webpage for reading books online. I'd like to save the position inside the document so when a user resumes his reading, he starts in the point where he previously was.

I can get the scroll using things like window.pageYOffset, but this depends on the browser window size. In other words, if you make your window narrower, the same text will be at a different scroll (see the image for an example).

So I need to come up with a window-size independent way of measuring scroll. Any ideas?

Note: I only need this to work on mozilla based browsers.

Problem example

Thanks in advance

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

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

发布评论

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

评论(2

×纯※雪 2024-12-12 09:49:40

啊啊啊啊,我的版本又晚了……但至少我有一个演示:

我的方法还使用百分比(滚动位置/(滚动高度 - 容器高度))

http://jsfiddle.net/wJhFV/show

$(document).ready(function(){
    var container = $("#container")[0];
    container.scrollTop =
        Number(localStorage["currentPosition"]) *
        (container.scrollHeight - $(container).height())

})

$("#container").scroll(function(){
    console.log("set to: ")
        console.log(
        localStorage["currentPosition"] =
            (this.scrollTop) /
            (this.scrollHeight - $(this).height())
        );
})

Aaaaaaand my version is late... again... but at least I have a demo:

My method also uses percents (scroll position / (scroll height - container height))

http://jsfiddle.net/wJhFV/show

$(document).ready(function(){
    var container = $("#container")[0];
    container.scrollTop =
        Number(localStorage["currentPosition"]) *
        (container.scrollHeight - $(container).height())

})

$("#container").scroll(function(){
    console.log("set to: ")
        console.log(
        localStorage["currentPosition"] =
            (this.scrollTop) /
            (this.scrollHeight - $(this).height())
        );
})
强辩 2024-12-12 09:49:40

如果我的假设是正确的,即相对于文档高度的相对scrollTop值始终相同,那么问题就可以相当简单地解决。

首先设置一个带有读取百分比的cookie:

var read_percentage = document.body.scrollTop / document.body.offsetHeight;
document.cookie = 'read_percentage=' + read_percentage + '; expires=Thu, 2 Aug 2021 20:47:11 UTC; path=/'

在下一个页面加载时,您可以通过在正文上设置scrollTop值来恢复位置:

var read_percentage = read_cookie('read_percentage');
document.body.scrollTop = document.body.offsetHeight * read_percentage

请注意,read_cookie不是浏览器功能。你必须实施它。示例可以在 http://www.quirksmode.org/js/cookies.html

我在一个大页面上对此进行了测试,效果非常好。

If my assumption is right that the relative scrollTop value in relation to the document height is always the same, the problem could be solved rather simply.

First set a cookie with the read percentage:

var read_percentage = document.body.scrollTop / document.body.offsetHeight;
document.cookie = 'read_percentage=' + read_percentage + '; expires=Thu, 2 Aug 2021 20:47:11 UTC; path=/'

On the next page load you can restore the position by setting the scrollTop value on the body:

var read_percentage = read_cookie('read_percentage');
document.body.scrollTop = document.body.offsetHeight * read_percentage

Note that read_cookie is not a browser function. You have to implement it. Example can be found on http://www.quirksmode.org/js/cookies.html

I tested this on a large page and it worked quite fine.

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