Je veux répliquer les événements standard startDrag/stopDrag avec ma propre routine pour modifier un peu les choses, et je rencontre un problème de propagation ou de bullage d'un événement. Voici mon code:Problèmes de réplication du glisser-déposer avec les événements souris
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
mouseDown="mouseDown = true" mouseUp="mouseDown = false"
mouseMove="mouseMove(event)">
<mx:Script>
<![CDATA[
private var mouseDown:Boolean = false;
private var oldMouseX:int = 0, oldMouseY:int = 0;
private function mouseMove(e:MouseEvent):void {
if (mouseDown) {
object.x += (e.localX - oldMouseX);
object.y += (e.localY - oldMouseY);
}
oldMouseX = e.localX;
oldMouseY = e.localY;
trace(e.localX);
}
]]>
</mx:Script>
<mx:Label id="object" text="Drag me" />
</mx:Application>
Le problème avec ce code est que lorsque vous faites glisser l'objet vers la droite, vous verrez dans la trace que de temps en temps quelques valeurs localX aléatoires arrivent là-bas, ce qui dans l'objet saccades d'un côté à côté.
Je ne comprends pas comment réparer cette partie, je pense que c'est l'étiquette qui provoque la bulle de l'événement mousemove, mais je ne comprends pas comment l'empêcher de le faire.
Toutes les suggestions sont grandement appréciées!
Vous voulez dire que je devrais ajouter if (e.target! = Object) return; sur le dessus de la fonction? Si je le fais, l'objet ne peut pas être déplacé du tout. Sinon, si j'ajoute if (e.target! = This) return; alors je peux glisser en se déplaçant sur l'arrière-plan et non sur l'objet. – melfar
Léger malentendu. J'ai ajouté le code que j'utilise pour faire une chose similaire. – Glenn
Vous devez utiliser la fonction "pointTo" pour traduire les coordonnées des événements parasites. par exemple, l'enfant TextField du contrôle Label. – Glenn