Как остановить браузер Android от прокрутки назад - PullRequest
0 голосов
/ 16 сентября 2011

Я работаю над мобильным приложением jquery и столкнулся с небольшой проблемой; Я хотел бы использовать jquery's animate () для плавной прокрутки «вверх» страниц моего приложения.

Следующий фрагмент кода прекрасно работает во всех браузерах, кроме одного. Chrome и Firefox на рабочем столе, Safari на iPhone и Firefox Beta на Android - это хорошо. После завершения анимации браузер Android по умолчанию (webkit-mobile IIRC) прокручивает обратно на якорь.

$("a[href='#top']").live('click', function() {
    $("body").animate({ scrollTop: 0 }, "slow", function() {
        // anim complete
        setTimeout(function() { // not needed, attempt to brute-force
          window.scrollTo(0,0);
          alert('foo'); // <- Android scrolls back to anchor after showing alert
        }, 50);
    });
});

Может кто-нибудь предложить а) что заставляет браузер Android прокручивать назад и / или б) предложить обходной путь? Если это имеет значение, устройство, на котором я сейчас тестирую, работает под управлением Android 2.3.2.

1 Ответ

0 голосов
/ 17 сентября 2011

Читая документацию по несвязанной проблеме, я наткнулся на метод $. Mobile.silentScroll () - предназначенный, по-видимому, именно для этой ситуации.

Вот мой первоначальный обходной путь:

function scrollToTop() {
    var scrollPos = $(document).scrollTop();
    scrollPos -= 60;
    if (scrollPos < 1) { scrollPos = 1; }
    $.mobile.silentScroll(scrollPos);
    if (scrollPos > 1) { setTimeout(scrollToTop, 60); }
}

$("a[href='#top']").live('vclick', function() {
    scrollToTop();
    return false;
});

По-прежнему любопытно, почему браузер Android хочет прокрутить назад до привязки в исходном виде.

...