Chrome возвращается на верх страницы после анимации scrollTop в более низкую позицию в окне onLoad. - PullRequest
0 голосов
/ 27 апреля 2018

После обновления нашего сайта с jQuery 1.10.2 до jQuery 3.3.1 у нас возникает следующая проблема.

У нас есть этот JavaScript, который заставляет страницу перейти на позицию 500 после загрузки.

$(window).on("load", function () {
    $("body, html").animate({ scrollTop: 500 }, 1);
}); 

Это прекрасно работает в Firefox.

В Chrome, однако, после прокрутки до этой позиции, он прокручивается обратно до верхней части страницы. Когда я перехожу в отладке Chrome JavaScript, после прокрутки вниз происходит прокрутка вверх по этому коду в файле jquery-3.3.1:

// Animations created synchronously will run synchronously
function createFxNow() {
    window.setTimeout( function() {
        fxNow = undefined;
    } );
    return ( fxNow = Date.now() );
}

Как я могу (1) предотвратить прокрутку Chrome назад или (2) прикрепить мой код к более позднему циклу перехвата страниц, что-то вроде $(window).on("completelyLoaded") и т. Д .?

1 Ответ

0 голосов
/ 27 апреля 2018

В конце концов я решил эту проблему, используя два вложенных оператора $(document).ready:

$(document).ready(function () {
    $(document).ready(function () {
        $("body, html").animate({ scrollTop: 500 }, 1);
    });
});

Это работает, очевидно, потому что готовые обратные вызовы вызываются в порядке их назначения. Когда вызывается внешний обратный вызов готовности, все остальные сценарии должны иметь уже назначенные обратные вызовы готовности. Так что назначение вашего готового обратного вызова (внутреннего) теперь приведет к тому, что ваш будет последним. Другими словами, это работает, потому что jQuery выполняет обработчики событий в том порядке, в котором они были добавлены, и добавление обработчика событий в ваш обработчик событий происходит настолько поздно, насколько это возможно.

...