2010-08-31 2 views
3

J'ai besoin d'implémenter la résistance de la souris en javascript.Comment implémenter "la résistance de la souris" en javascript?

À titre d'exemple de ce que je veux dire, penser à la façon dont le gestionnaire de fenêtres Enligthenment gère la résistance de bord de l'écran pour basculer entre les différents postes de travail, ou si vous n'êtes pas familier avec ce:

imaginer un grand rectangle avec un carré à l'intérieur il. Lorsque vous déplacez la souris [onmousedown] dans le carré, la souris se déplace jusqu'à la limite du carré, puis exerce une certaine résistance jusqu'à ce qu'un seuil soit atteint, puis se déplace dans le plus grand rectangle.

Idéalement, le curseur de la souris doit rester coincé dans le carré jusqu'à ce que ce seuil ne soit pas atteint, et ne quitter cette zone que s'il est rencontré.

Des idées ou des exemples de cela quelque part? Une solution de crossbrowser est également grandement appréciée. (jusqu'à IE7, c'est-à-dire) Merci!

+4

Vous ne pouvez pas influencer la position de la souris avec javascript, ce qui n'est pas une option. Avec Flash, vous pouvez masquer le curseur, cela pourrait vous donner une certaine possibilité de ce que vous voulez. – Wolph

+0

C'est ce qui m'a traversé l'esprit, mais j'espérais avoir tort. Y a-t-il une autre façon de penser à [ui sage] pour obtenir le même effet? – DLeonardi

+0

@WoLpH: Était sur le point de mentionner cela. Cependant, je ne pense pas que le fait de cacher la souris soit une bonne idée - le mieux que vous puissiez faire est de créer l '* illusion * du changement de position de la souris, et lorsque l'utilisateur sortira de la zone affectée, il y aura une disjonction. position du curseur faux et réel qui peut confondre ou ennuyer. Cependant, ce n'est pas un problème lorsque vous parlez de la mise en œuvre au niveau OS. –

Répondre

3

Comme indiqué, vous ne pouvez pas définir la position de la souris avec Javascript.

Puisque vous avez demandé comment implémenter ceci sur mousedown, cependant, je suppose que l'utilisateur fait glisser quelque chose à l'écran. Donc, vous pourriez avoir l'élément qu'ils traînent montrent ce comportement. Vous avez besoin de deux éléments pour agir en tant que régions, l'une où la cible peut être déplacée librement et l'autre pour définir la taille de la limite. Je le ferais avec jQuery pour raccourcir le code mais en gros vous auriez quelque chose comme ça. (Code non testé)

HTML:

<div class='borderLand'> 
    <div class='freeZone'> 
     <img class='draggable'> 
    </div> 
</div> 

CSS:

.borderLand {position: relative; width: 110px; height: 110px;} 
.freeZone {position: relative; top: 10px; left:10px; height: 100px; width: 100px;} 

JS:

Je ne peux pas écrire le code complet du haut de ma tête, mais l'algorithme serait être quelque chose comme

onmousedown{ 
    check for click location 
    if it's over the draggable (watch for bubbling) begin dragging, set dragging flag 
} 

onmouseup{ 
    clear dragging flag if it's set 
} 

borderland onmouseover{ 
    if dragging, stop the movement of the draggable (watch for bubbling here too) 
} 

borderland onmouseout{ 
    start dragging again (if they move back in or out it doesn't matter, you want to drag) 
} 

Désolé si vous avez besoin de plus de détails, mais le faire en JS serait un peu long et je ne sais pas de combien d'aide vous avez besoin.

Questions connexes