10
votes

JQuery Scrolltop inconsistant à travers les navigateurs

en chrome et safari, $ ("corps"). Scrolltop (1000) va si attendu.

dans IE et FF, rien ne se passe.

dans IE et FF, $ (fenêtre) .scrolltop (1000) fonctionne, mais ils vont à différents endroits. Cela fonctionne également à Chrome et à Safari, mais ils vont également à un endroit différent. Ils semblent être jusqu'à 300-500 pixels éteints.

Y a-t-il un moyen cohérent de définir la propriété ScrollTop qui fonctionne avec le navigateur croisé, et sinon, pourquoi ne pas JQuery résumé cela?

J'aimerais aussi l'animer, ce qui fonctionne bien en chrome et en safari, mais pas dans les autres navigateurs.

est ma seule option pour la détection de navigateur? (mauvaise pratique) ou y a-t-il un meilleur moyen?


2 commentaires

Avez-vous essayé d'utiliser $ (document) .scrolltop ("...")?


Cela a effectivement travaillé. J'avais essayé $ («document») mais cela n'a pas. Si vous répondez comme une question, je vous donnerai du crédit.


3 Réponses :


6
votes

Essayez xxx


0 commentaires

11
votes

$ (jquery.browser.webkit? "corps": "html"). Animate ({Scrolltop: MyTop}, MyDUR);

navigateurs WebKit (Chrome / Safari, Mac et Win) Utilisez «Corps», d'autres (FF / Opera / IE 7-9) Utilisez «HTML»

Détection de navigateur d'amour de Gotta.


1 commentaires

jquery.browser est obsolète depuis la version 1.3 et retiré de 1,9



0
votes

Vous devez appliquer ScrollTop code> sur Corps code> ou html code> en fonction du navigateur, mais il n'y a pas de mal à l'appliquer aux deux. Etant donné que .scrolltop () code> s'applique à l'élément premier em> dans l'ensemble, mais .animer () code> s'applique à tous les éléments, vous pouvez le faire:

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


1 commentaires

Notez que si animate a une fonction de rappel, elle est exécutée deux fois. Cela peut être une douleur lorsque vous poussez à l'histoire API, et al.