当前位置: 首页 > 面试题库 >

防止浏览器在刷新时自动滚动

汝繁
2023-03-14
问题内容

如果转到页面a并滚动浏览,则刷新页面将在您离开页面的位置刷新。这很好,但是在URL中存在锚点位置的页面上也会发生这种情况。例如,如果您单击一个链接http://example.com/post/244#comment5并在环顾四周后刷新页面,您将不会处于锚点,而页面会跳来跳去。有什么办法可以防止使用javascript吗?因此,无论如何,您始终可以导航到锚点。


问题答案:

由于浏览器行为的更改,不再建议使用此解决方案。查看其他答案。

基本上,如果使用锚,则将绑定到Windows滚动事件。这样的想法是,第一个滚动事件必须属于浏览器完成的自动重新定位。发生这种情况时,我们将进行自己的重新定位,然后删除绑定的事件。这样可以防止随后的页面滚动使系统混乱。

$(document).ready(function() {
    if (window.location.hash) { 
        //bind to scroll function
        $(document).scroll( function() {
            var hash = window.location.hash
            var hashName = hash.substring(1, hash.length);
            var element;

            //if element has this id then scroll to it
            if ($(hash).length != 0) {
                element = $(hash);
            }
            //catch cases of links that use anchor name
            else if ($('a[name="' + hashName + '"]').length != 0)
            {
                //just use the first one in case there are multiples
                element = $('a[name="' + hashName + '"]:first');
            }

            //if we have a target then go to it
            if (element != undefined) {
                window.scrollTo(0, element.position().top);
            }
            //unbind the scroll event
            $(document).unbind("scroll");
        });
    }

});


 类似资料:
  • When webpack-dev-server is running it will watch your files for changes. When that happens it rebundles your project and notifies browsers listening to refresh. To trigger this behavior you need to ch

  • 有没有办法禁用某些现代浏览器(Chrome和Safari)在刷新页面时记住滚动位置的行为?

  • 我开始使用laravel,每次手动更新浏览器有点繁琐,在此之前,当我只使用html、css、js时,我在VisualStudioCode中得到了LiveServer的帮助。我想找到类似的东西,在node.js中找到了BrowseSync,但它在一个单独的服务器上工作,我需要它在xaamp上工作

  • 问题内容: 是否可以在计时器上自动刷新网站(例如每15分钟刷新一次)?基本上,我们将对网站进行更新,我们希望它自动刷新,以便它将显示在我们拥有的大型显示器上,该显示器由另一台计算机控制。 因此,更改后,它不会自动转到另一台计算机上以单击刷新,而是会自动刷新,以便我们将其保留在该位置。 谢谢! 问题答案: 900秒后,将其放入刷新页面: 值得一提的是,w3c已正式弃用了此功能,但浏览器继续支持此功能

  • 当用户试图关闭页面时(单击浏览器窗口上的X按钮或离开页面),我需要发送一条消息,如“确定吗?”并执行一些操作。 我正在使用离子3,这是我的配置 cli包:(/home/ubuntu/workspace/mHS/node_modules) 全球套餐: 本地套餐: 系统: 杂项: 我尝试了不同的方法,但没有成功: 1-离子生命周期钩 2-主机侦听器 } 3-超文本标记语言 我错过了什么?

  • 我正在创建聊天应用程序,我想每秒刷新一次数据,但问题是recyclerview scroll重置了它们的第一个位置。如何摆脱这个。提前感谢:) 我使用MySql sserver添加和获取数据。