2010-07-19 3 views
2

J'utilise le code suivant pour faire défiler une couche selon la position de la souris:défilement jquery vitesses

$(".icons").animate({scrollTo:x},duration); 

Il fonctionne trouve cependant, je trouve que la vitesse de défilement est beaucoup plus rapide en allant vers la droite . Aussi remarqué que si le défilement commence à gauche et faites défiler vers la droite juste un petit peu, puis faites défiler vers le bas pour revenir à droite, c'est vraiment très lent. Je suppose que la vitesse de défilement d'actuall n'est pas mieux contrôlée en utilisant l'argument de la durée, mais je ne suis pas sûr de savoir comment contrôler la vitesse. Je voudrais avoir une vitesse constante, peu importe où la barre de défilement est.

Des pointeurs?

Merci

+0

ce devrait être 'scrollTop', pas' scrollTo'. Faute de frappe? – jAndy

+0

désolé, bien repéré. J'utilise en fait scrollLeft .. scroller horizontal ... J'ai jeté un coup d'oeil au plugin scrollTo et au scroller lisse mais je voudrais éviter d'utiliser des charges de plugins ... –

Répondre

6

Le problème est que est une durée, pas une vitesse vous passez, vous devez donc baser la durée sur la distance que vous devez déplacer, comme ceci:

$(".icons").each(function() { 
    var duration = Math.abs($(this).scrollLeft() - x) * 2; //2ms per pixel moved 
    $(this).animate({scrollLeft: x}, duration); 
}); 

Vous peut ajuster cette constante au besoin, mais c'est la prémisse de base, obtenir la distance dont vous avez besoin de déplacer (la valeur absolue) et multiplier ce nombre de pixels fois une constante si nécessaire, c'est millisecondes par pixel.

+0

Merci Nick, c'est ce que je recherchais. .. encore a tordre mon code abit mais vous avez frappé le clou sur la tête ... a bientôt! –

+0

juste pour vous mettre à jour que j'ai mis en œuvre ce qui précède et cela fonctionne un régal. Très appréciée! –

+0

@Steven - Excellent :) Toujours heureux d'entendre un problème est résolu. –