2012-01-27 18 views
9

W przeglądarce Chrome i Safari $("body").scrollTop(1000) przechodzi w oczekiwany sposób.jQuery scrollTop niespójne w różnych przeglądarkach

W IE i FF nic się nie dzieje.

W IE i FF, $(window).scrollTop(1000) działa, ale trafiają do różnych miejsc. Działa również w przeglądarce Chrome i Safari, ale obie są również dostępne w innym miejscu. Wygląda na to, że mają nawet 300-500 pikseli.

Czy istnieje jakiś spójny sposób ustawienia właściwości scrollTop, która działa w przeglądarce, a jeśli nie, dlaczego jQuery nie streści tego?

Chciałbym go również ożywić, co działa dobrze w Chrome i Safari, ale nie w innych przeglądarkach.

Czy moja jedyna opcja umożliwia wykrywanie przeglądarki? (Zła praktyka) Czy jest jakiś lepszy sposób?

+0

czy próbowałeś używać $ (dokument) .scrollTop ("...")? – epignosisx

+0

To faktycznie zadziałało. Próbowałem $ ("dokument"), ale tak się nie stało. Jeśli odpowiesz jako pytanie, dam ci kredyt. –

Odpowiedz

11

$(jQuery.browser.webkit ? "body": "html").animate({ scrollTop: myTop }, myDur);

przeglądarek Webkit (Chrome/Safari, Mac i Win) użyć "ciało", inni (FF/Opera/IE 7-9) używać "html"

Muszę kochać wykrywanie przeglądarki.

+5

jQuery.browser jest przestarzałe od wersji 1.3 i usunięte z wersji 1.9 –

0

Musisz zastosować scrollTop do body lub html w zależności od przeglądarki, ale nie zaszkodzi zastosowanie go do obu. Od .scrollTop() dotyczy pierwszej elementu w zestawie, ale .animate() dotyczy wszystkich elementów, można to zrobić:

$('body, html').animate({ 
    scrollTop: 1000 
}, 'fast'); 

Jeśli chcesz zmiana natychmiast zastosować, zmienić prędkość ('fast') do 0. Alternatywnie możesz użyć następującego, ale lubię powyższą składnię lepiej:

$('body, html').each(function() { $(this).scrollTop(1000); }); 
Powiązane problemy