Les événements et la position du curseur

J'en veux pour preuve les coordonnées de la souris alors que le curseur au-dessus de la div rouge et le bouton de la souris est en baisse.

Le problème est que lorsque je presse le bouton à l'extérieur de la div et de revenir le curseur à la div, événement onmousemove n'est pas supprimé.

REMARQUE: je ne veux pas utiliser n'importe quelle bibliothèque comme jQuery.

        <script type="text/javascript">

              window.onload = function(){

      document.getElementById("thediv").onmousedown = AttachEvent;

     }
            function GetPos(e){                                
                document.getElementById('X').value = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
                document.getElementById('Y').value = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);

            }

            function UnaatachEvent(e){
                document.getElementById("thediv").onmousemove = null;
                document.getElementById("thediv").onmouseup = null;
            }

            function AttachEvent(e){
                document.getElementById("thediv").onmousemove = GetPos;
                document.getElementById("thediv").onmouseup = UnaatachEvent;
            }
        </script>
    </head>
    <body>
        <input type="text" id="X" size="3">X-position
        <br/>
        <br/>
        <input type="text" id="Y" size="3">Y-position 
        <div style="width:100px;height:100px;background-color:red;margin:auto;" id="thediv">
        </div>
    </body>

Mise à JOUR:

Avec jQuery, c'est très facile: (testé sous Firefox uniquement)
texte du lien

$(document).ready(function(){

    $('#thediv').mousedown(attachEvent);
  });  
function attachEvent(e){
       $('#thediv').mousemove(getPos).mouseup(unattachEvent);

      return false;
}

function getPos(e){

  document.getElementById('X').value = e.pageX;
  document.getElementById('Y').value = e.pageY;            
 return false;
}

function unattachEvent(e){
   $('#thediv').unbind("mousemove", getPos).unbind("mouseup", unattachEvent);

Veuillez noter scénarios principaux:

  1. Si le bouton a été cliqué en dehors de la place, et, tout en maintenant, a déménagé à suqre - Ne pas upddate position.
  2. Si le bouton a été cliqué à l'intérieur de la place , et, tout en maintenant, se déplacer à l'extérieur - stop de mise à jour, de le ramener (sans relâcher le bouton) de continuer à mettre à jour

En d'autres termes, la première mousedown devrait être en place seulement pour commencer la mise à jour.

Je veux faire la même chose avec javascript.

OriginalL'auteur jullin | 2010-11-06