为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2019-08-17 15:05:47
如何在加载页面时禁用锚点“跳转”?我认为这可能是不可能的,我会尽力解释。我有一个包含选项卡(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”,从而防止锚点“跳转”。希望这很清楚。谢谢
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

if (location.hash) {
  setTimeout(function() {
    window.scrollTo(0, 0);
  }, 1);}

编辑:经过测试,适用于Windows上的Firefox,IE和Chrome。
编辑2:移动setTimeout()内部if块,道具@vsync。


查看完整回答
反对 回复 2019-08-17
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

诀窍是只删除主题标签ASAP并存储其值供您自己使用:

重要的是你不要把这部分代码放在$()或$(window).load()函数中,因为它会延迟并且浏览器已经移动到标记。

// 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 itwindow.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 () {});
    }});


查看完整回答
反对 回复 2019-08-17
?
桃花长相依

TA贡献1860条经验 获得超8个赞

还有其他方法可以跟踪您所使用的标签; 也许设置一个cookie,或隐藏字段中的值等等。

我会说,如果你不希望页面在加载时跳转,你最好使用其中一个选项而不是哈希,因为使用哈希优先于它们的主要原因是准确地允许你我想要阻止。

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

希望有所帮助。


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 868 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信