window.location.hash - остановить перезагрузку в Chrome - PullRequest
4 голосов
/ 01 декабря 2011

У меня следующая проблема:

$('.gotoservices').click(function(){
    $('html,body').scrollTo($("#services"),1000);
    window.location.hash = "services";
    return false;
});

Этот код работает, но по какой-то причине страница мигает до scrollTo.

Если удалить строку window.location.hash, то return false; работает, и страница не мигает.

Я пробовал e.preventDefault - не работает

Я изо всех сил пытаюсь найти какую-нибудь работу вокруг.

Приветствия

Ответы [ 2 ]

2 голосов
/ 27 января 2015

В общем смысле вы можете обновить URL-адрес HTML5 history без необходимости повторной визуализации браузером:

history.pushState(null, null, '#myhash');

Конечно, вы, вероятно, захотите использовать запасные версии для старых браузеров, иВозможно, вы захотите сделать это только после завершения анимации.

Итак, интегрировано с вашим кодом:

$('.gotoservices').click(function(e){
    //Prevent default so the browser doesn't try to do anything
    e.preventDefault();
    var $hash = "#services";
    $('html,body').scrollTo($($hash), 1000, function () {
        //If the browser supports HTML5 history,
        //use that to update the hash in the URL
        if (history.pushState) {
            history.pushState(null, null, $hash);
        }
        //Else use the old-fashioned method to do the same thing,
        //albeit with a flicker of content
        else {
            location.hash = $hash;
        }
    });
});
0 голосов
/ 01 декабря 2011

Почему бы вам просто не сделать функцию, специально предназначенную для прокрутки до #services? Вы говорите своему веб-браузеру перейти на #services, а затем перейти к #services. Вероятно, есть конфликт с этим. Если вы пытаетесь обновить URL, чтобы иметь хеш, то вам, вероятно, нужно

$(window).bind('hashchange', function(e) {
    e.preventDefault();
});

чтобы он не пытался "перейти к хешу".

...