Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Safari中禁用/覆盖来自popstate事件的锚点跳转_Javascript_Jquery_Html_Safari_Html5 History - Fatal编程技术网

Javascript 在Safari中禁用/覆盖来自popstate事件的锚点跳转

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之前导致原始锚

这让我快发疯了。 如果您在同一页面上有带有锚定的导航,则当调用popstate时,浏览器自然会将您带回/转发到历史记录中该链接的位置

假设您可以通过e.preventDefault();-但到目前为止情况并非如此

在大多数现代浏览器中,我都能够通过存储$(window.scrollTop()之类的内容来破解覆盖;在一个变量中,并在popstate内调用它:$window.scrollTop(somevar)

但是,在Safari中,这种解决方法会在重新定位到指定的scrollTop之前导致原始锚点位置的快速闪烁,这使它成为一种非解决方案

在尝试了各种想法之后,似乎实现我所需要的唯一方法就是找到一种方法,让Safari像Chrome或FF那样对待这些锚,或者完全按照popstate的想法禁用它们

下面是前面提到的覆盖示例(适用于chrome、FF等)


已解决

据我所知,没有明显的方法来实现这一点,所以我把时间花在了一种变通方法上。我没有试图停止散列,而是通过临时给容器位置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
});