首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在加载页面时禁用锚点“跳转”?

如何在加载页面时禁用锚点“跳转”?
EN

Stack Overflow用户
提问于 2010-09-07 21:31:53
回答 14查看 163.5K关注 0票数 117

我认为这可能是不可能的,我会尽我所能地解释。我有一个包含选项卡(jquery powered)的页面,由以下内容控制:

我正在使用这段代码,这是由另一个用户在前面的问题中提供的。

代码语言:javascript
复制
<script type="text/javascript">
    $(function() {

     $('html, body').animate({scrollTop:0}); // this is my "fix"

        var tabContent = $(".tab_content");
        var tabs = $("#menu li");
        var hash = window.location.hash;
     tabContent.not(hash).hide();
        if(hash=="") {
      $('#tab1').fadeIn();
     }
        tabs.find('[href=' + hash + ']').parent().addClass('active');

        tabs.click(function() {
            $(this).addClass('active').siblings().removeClass('active');
            tabContent.hide();
            var activeTab = $(this).find("a").attr("href");

            $(activeTab).fadeIn();
           return false;
        });

    });
</script>

当我直接访问“标签”页面时,这段代码工作得很好。

但是,我需要从其他页面链接到单独的选项卡-因此,要做到这一点,代码将获取window.location.hash,然后显示相应的选项卡。

页面不会因为"return false“而”跳转“到锚点。

但是,此事件仅在单击事件时触发。因此,如果我从任何其他页面访问我的“标签”,就会触发“跳转”效果。为了解决这个问题,我会自动滚动到页面的顶部,但我不希望这种情况发生。

有没有办法在页面加载时模拟“返回假”,防止锚点“跳转”发生。

希望这已经足够清楚了。

谢谢

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-09-07 21:40:05

你的修复不起作用了吗?我不确定我是否正确理解了这个问题--你有演示页面吗?您可以尝试:

代码语言:javascript
复制
if (location.hash) {
  setTimeout(function() {

    window.scrollTo(0, 0);
  }, 1);
}

编辑:已在Windows上的Firefox、IE和Chrome中测试并工作。

编辑2:在if块内移动setTimeout(),props @vsync。

票数 151
EN

Stack Overflow用户

发布于 2015-04-23 20:47:14

在这里看我的答案:Stackoverflow Answer

诀窍是尽快删除hashtag并存储它的值供您自己使用:

重要的是,不要将这部分代码放在$()或$(window).load()函数中,因为为时已晚,而且浏览器已经移动到标记。

代码语言:javascript
复制
// store the hash (DON'T put this code inside the $() function, it has to be executed 
// right away before the browser can start scrolling!
var target = window.location.hash,
    target = target.replace('#', '');

// delete hash so the page won't scroll to it
window.location.hash = "";

// now whenever you are ready do whatever you want
// (in this case I use jQuery to scroll to the tag after the page has loaded)
$(window).on('load', function() {
    if (target) {
        $('html, body').animate({
            scrollTop: $("#" + target).offset().top
        }, 700, 'swing', function () {});
    }
});
票数 52
EN

Stack Overflow用户

发布于 2010-09-07 21:43:18

还有其他方法可以跟踪您所在的选项卡;可能是设置cookie,或者在隐藏字段中设置值,等等。

我要说的是,如果你不希望页面在加载时跳转,你最好使用这些其他选项中的一个,而不是使用散列,因为优先使用散列的主要原因是允许你想要阻止的东西。

另一点-如果您的散列链接与文档中标记的名称不匹配,页面将不会跳转,因此,如果您想继续使用散列,您可以操作内容,使标记的名称不同。如果您使用一致的前缀,您仍然可以使用Javascript在两者之间跳转。

希望这能有所帮助。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3659072

复制
相关文章

相似问题

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