首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在重新加载页面;锚点链接被忽略,并且优先使用以前的滚动位置?

正在重新加载页面;锚点链接被忽略,并且优先使用以前的滚动位置?
EN

Stack Overflow用户
提问于 2012-05-18 00:42:05
回答 2查看 2.9K关注 0票数 4

这让我莫名其妙,我担心我可能做了一些非常愚蠢的事情。

我有一个执行ajax调用的表单,如果调用成功,就重新加载(相同的)页面,并使用URL散列/片段跳转到页面底部提交的数据。

代码语言:javascript
复制
window.location.href = "/this/url/#post-10";
window.location.reload();

...

<div id="post-10">...</div>

我注意到,至少在Chrome中,以前的滚动位置比我提供的锚点链接更受青睐-因此页面重新加载,成功地跳转到我的id锚点,但一旦页面加载完成,它就会跳到前一页面上滚动的位置。

这是标准行为吗?解决这个问题的最好方法是简单地使用onLoad或类似的东西强制页面定位吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-18 00:44:02

window.location.href = "/this/url/#post-10";将会自己工作,不需要第二次重新加载页面,这(据我所知)将有利于前一个滚动位置。

票数 2
EN

Stack Overflow用户

发布于 2012-05-18 01:17:06

如果您使用的是ajax,为什么要重新加载页面呢?

只需删除行window.location.reload();

window.location.href = "/this/url/#post-10";足以滚动到该post-10部分。

顺便说一句,一个更好的(很酷的)方法是使用滚动效果。

代码语言:javascript
复制
var targetOffset = $('#post-10').offset().top ;
var scrollElem = scrollableElement('html', 'body');

$(scrollElem).animate({scrollTop: targetOffset}, 400, function() {
    // scroll is complete
      location.hash = 'post-10';
});

   // Use the first element that is "scrollable"  (cross-browser fix?)
function scrollableElement(els) {
    for (var i = 0, argLength = arguments.length; i <argLength; i++) {
        var el = arguments[i],
        $scrollElement = $(el);
        if ($scrollElement.scrollTop()> 0) {
            return el;
        } else {
            $scrollElement.scrollTop(1);
            var isScrollable = $scrollElement.scrollTop()> 0;
            $scrollElement.scrollTop(0);
            if (isScrollable) {
                return el;
            }
        }
    }
    return [];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10639874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档