2010-07-10 8 views
0

J'ai un bon script de curseur de travail (aucune bibliothèque utilisée). J'ai besoin d'un concept mathématique qui permettrait au curseur d'effectuer un rappel sur un intervalle de pixels spécifié. Ainsi, par exemple, mon curseur a une largeur de 300 pixels et je spécifie l'intervalle = 10, puis lorsque l'utilisateur glisse la poignée, le rappel doit se produire aux positions de pixels 10,20,30,40 et ainsi de suite. Si l'intervalle = 3 alors le rappel devrait se produire aux positions de pixels 3,6,9,12 ... etc. C'est la formule mathématique que je recherche spécifiquement. Toute aide serait appréciée.Comment faire en sorte que mon curseur fasse quelque chose à chaque intervalle de pixels spécifié?

Pat

+0

Vraiment difficile de répondre sans voir de code, mais j'imagine que vous deviez prédéfinir les points du curseur avant le rendu, puis comparer la position du curseur à eux en mouvement? –

Répondre

0

dire donc que vous avez les variables:

var width = 300; // px 
var interval = 10; // px 
var pos; // current position 

Et alors vous devriez faire:

if (pos % interval === 0) 
    // do stuff 

Ceci est appelé modulus operator qui renvoie le reste de la division left_var par right_var. Si le remainder est 0 votre chèque retournera true, et ainsi vous faites le rappel (exactement au pixel 10, 20, 30, 40, etc.). Mais s'il vous plaît noter qu'il est très naïf de penser que vous serez capable de gérer chaque changement de pixel ... Ce que je préfère faire est d'examiner si le curseur est entré dans un segment donné.

var segment = 1; 

Puis, après l'état des changements de curseur que vous vérifiez pour la position comme ceci:

if (Math.floor(pos/interval) === segment) { 
    // do stuff because the slider 
    // has entered a new segment 
    // ... 
    segment++; 
} 

Si le curseur se déplace vers l'arrière et que vous voulez tirer les événements en conséquence tout décrémenter le segment au lieu de incrémenter.

+0

Merci pour vos bons conseils sur cette question. Les deux méthodes fonctionnent bien. Vous avez indiqué que vous préféreriez la méthode du segment. La seule chose que je devrais probablement faire différemment est au lieu d'utiliser math.floor, utiliser un décalage de bit n | 0 ou n | n pour une meilleure vitesse, correct? – cube

Questions connexes