猿问

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

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

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

我正在使用此代码,由前一个问题中的其他用户提供。

<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>

当我直接访问“标签页”时,此代码非常有用。

但是,我需要链接到其他页面的invidual标签 - 所以要做到这一点,代码获取window.location.hash然后显示适当的选项卡。

由于“返回false”,页面不会“跳转”到锚点。

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

是否有任何方法可以在页面加载时模拟“返回false”,从而防止锚点“跳转”。

希望这很清楚。

谢谢


万千封印
浏览 929回答 3
3回答

犯罪嫌疑人X

你的修复不起作用吗?我不确定我是否正确理解了这个问题 - 你有一个演示页吗?你可以尝试:if&nbsp;(location.hash)&nbsp;{ &nbsp;&nbsp;setTimeout(function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;window.scrollTo(0,&nbsp;0); &nbsp;&nbsp;},&nbsp;1);}编辑:经过测试,适用于Windows上的Firefox,IE和Chrome。编辑2:移动setTimeout()内部if块,道具@vsync。

蝴蝶不菲

诀窍是只删除主题标签ASAP并存储其值供您自己使用:重要的是你不要把这部分代码放在$()或$(window).load()函数中,因为它会延迟并且浏览器已经移动到标记。//&nbsp;store&nbsp;the&nbsp;hash&nbsp;(DON'T&nbsp;put&nbsp;this&nbsp;code&nbsp;inside&nbsp;the&nbsp;$()&nbsp;function,&nbsp;it&nbsp;has&nbsp;to&nbsp;be&nbsp;executed&nbsp;//&nbsp;right&nbsp;away&nbsp;before&nbsp;the&nbsp;browser&nbsp;can&nbsp;start&nbsp;scrolling!var&nbsp;target&nbsp;=&nbsp;window.location.hash, &nbsp;&nbsp;&nbsp;&nbsp;target&nbsp;=&nbsp;target.replace('#',&nbsp;'');//&nbsp;delete&nbsp;hash&nbsp;so&nbsp;the&nbsp;page&nbsp;won't&nbsp;scroll&nbsp;to&nbsp;itwindow.location.hash&nbsp;=&nbsp;"";//&nbsp;now&nbsp;whenever&nbsp;you&nbsp;are&nbsp;ready&nbsp;do&nbsp;whatever&nbsp;you&nbsp;want//&nbsp;(in&nbsp;this&nbsp;case&nbsp;I&nbsp;use&nbsp;jQuery&nbsp;to&nbsp;scroll&nbsp;to&nbsp;the&nbsp;tag&nbsp;after&nbsp;the&nbsp;page&nbsp;has&nbsp;loaded)$(window).on('load',&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(target)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('html,&nbsp;body').animate({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scrollTop:&nbsp;$("#"&nbsp;+&nbsp;target).offset().top &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;700,&nbsp;'swing',&nbsp;function&nbsp;()&nbsp;{}); &nbsp;&nbsp;&nbsp;&nbsp;}});

桃花长相依

还有其他方法可以跟踪您所使用的标签;&nbsp;也许设置一个cookie,或隐藏字段中的值等等。我会说,如果你不希望页面在加载时跳转,你最好使用其中一个选项而不是哈希,因为使用哈希优先于它们的主要原因是准确地允许你我想要阻止。另一点 - 如果您的哈希链接与文档中的标记名称不匹配,页面将不会跳转,因此,如果您想继续使用哈希,您可以操纵内容以便标记的名称不同。如果您使用一致的前缀,您仍然可以使用Javascript在之间跳转。希望有所帮助。
随时随地看视频慕课网APP

相关分类

JQuery
我要回答