Javascript 在Safari中禁用/覆盖来自popstate事件的锚点跳转
这让我快发疯了。 如果您在同一页面上有带有锚定的导航,则当调用popstate时,浏览器自然会将您带回/转发到历史记录中该链接的位置 假设您可以通过e.preventDefault();-但到目前为止情况并非如此 在大多数现代浏览器中,我都能够通过存储$(window.scrollTop()之类的内容来破解覆盖;在一个变量中,并在popstate内调用它:$window.scrollTop(somevar) 但是,在Safari中,这种解决方法会在重新定位到指定的scrollTop之前导致原始锚点位置的快速闪烁,这使它成为一种非解决方案 在尝试了各种想法之后,似乎实现我所需要的唯一方法就是找到一种方法,让Safari像Chrome或FF那样对待这些锚,或者完全按照popstate的想法禁用它们 下面是前面提到的覆盖示例(适用于chrome、FF等)Javascript 在Safari中禁用/覆盖来自popstate事件的锚点跳转,javascript,jquery,html,safari,html5-history,Javascript,Jquery,Html,Safari,Html5 History,这让我快发疯了。 如果您在同一页面上有带有锚定的导航,则当调用popstate时,浏览器自然会将您带回/转发到历史记录中该链接的位置 假设您可以通过e.preventDefault();-但到目前为止情况并非如此 在大多数现代浏览器中,我都能够通过存储$(window.scrollTop()之类的内容来破解覆盖;在一个变量中,并在popstate内调用它:$window.scrollTop(somevar) 但是,在Safari中,这种解决方法会在重新定位到指定的scrollTop之前导致原始锚
已解决 据我所知,没有明显的方法来实现这一点,所以我把时间花在了一种变通方法上。我没有试图停止散列,而是通过临时给容器位置fixed+current scroll position,然后在页面转换函数完成后删除调整,从而达到了预期的效果
var scrollY;
$(window).on('scroll', function(e) {
scrollY = $window.scrollTop();
});
$(window).on('popstate', function(e) {
$(window).scrollTop(scrollY);
$('.container').css({
'position': 'fixed',
'top': '-'scrollY+'px'
});
yourFunction(); // contains animation sequence / css removal
});
var scrollY;
$(window).on('scroll', function(e) {
scrollY = $window.scrollTop();
});
$(window).on('popstate', function(e) {
$(window).scrollTop(scrollY);
$('.container').css({
'position': 'fixed',
'top': '-'scrollY+'px'
});
yourFunction(); // contains animation sequence / css removal
});