Javascript 在Firefox中,设置window.location.hash时可以避免默认操作吗?

Javascript 在Firefox中,设置window.location.hash时可以避免默认操作吗?,javascript,jquery,firefox,Javascript,Jquery,Firefox,我有一个带有标题和内容的页面 收割台有位置:固定;高度:200px,内容如下 在标题中,我有一个链接插件,它使用jQueryanimate。在这里,我稍微修改了插件,以考虑到200px的偏移量。这在Chrome和Safari中运行良好 不过,Firefox中没有。插件工作正常,滑动到正确的位置,直到调用window.location.hash=element。然后,Firefox返回到默认行为,将元素设置在页面顶部(因此忽略了由于页眉而产生的偏移量——这是我描述的第一个问题) 我知道Firefo

我有一个带有标题和内容的页面

收割台有
位置:固定;高度:200px
,内容如下

在标题中,我有一个链接
插件,它使用jQuery
animate
。在这里,我稍微修改了插件,以考虑到200px的偏移量。这在Chrome和Safari中运行良好

不过,Firefox中没有。插件工作正常,滑动到正确的位置,直到调用
window.location.hash=element
。然后,Firefox返回到默认行为,将元素设置在页面顶部(因此忽略了由于页眉而产生的偏移量——这是我描述的第一个问题)

我知道Firefox3.6实现了一个
onhashchange
监听器。我根据文档
window.onhashchange=function(){}
进行了重写,它确实调用了该文档,但它继续触发默认操作,即在窗口顶部设置元素,忽略我的标题。我怎样才能解决这个问题


(否则,在这些“固定标题”的情况下是否可以设置窗口偏移量?

如果您无法找到防止Firefox的
OhashChange
行为的方法,那么您最好以不同的方式解决问题。有几点建议:

  • 修改anchorAnimate以从不设置window.location.hash(注释掉第34行)。这样做的问题是,url永远不会更改,用户将无法为直接指向该div的url添加书签或复制url

  • 编写您自己的代码(或修改anchorAnimate)以执行以下操作:

    var currentScroll = $('html, body').scrollTop();    
    window.location.hash = 'myAnchor';
    $('html, body').scrollTop(currentScroll)
                   .animate({ scrollTop: destination - 200 });
    
  • 这将设置定位点,但会立即将您滚动回浏览器以前所在的位置。从那里,您可以设置动画到任何所需的滚动位置

    我登录了Firefox(对于其他浏览器,我也非常确定),用户不会看到任何滚动变化