我製作一個精靈,然後添加一個子精靈。MOUSE_OUT事件在父項爲mouseEnabled = false時未觸發,mouseChildren = false
我將一個偵聽器添加到MOUSE_OUT事件的子項中。
如果我的鼠標位於子精靈,當我設置父精靈mouseEnabled = false並且mouseChildren = false時,MOUSE_OUT不會在子級上觸發。
但是,當我移動鼠標時,MOUSE_OUT被觸發。如果點擊,MOUSE_OUT也會被觸發。如果我使用鼠標滾輪,MOUSE_OUT不會被觸發。
那麼,這是怎麼回事?
研究back2dos'代碼後,我發現我在做什麼不同的只是設置mouseChildren = =的mouseEnabled假之前調用stage.focus = NULL。我將舞臺焦點設置爲null以清除文本字段中閃爍的光標...是否有更好的方法來執行此操作?
這裏是back2dos的修改代碼。重現步驟:點擊文本框,獲得閃爍的光標。單擊「按鈕」,但不要在向下和向上之間移動鼠標。注意光標不閃爍(好)。還要注意按鈕上的mouse_out事件沒有被觸發。直到你移動或點擊鼠標。
package {
import flash.display.*;
import flash.events.*;
import flash.geom.ColorTransform;
public class Test extends Sprite {
private var child:Sprite
public function Test() {
this.addChild(child = new Sprite());
child.graphics.beginFill(0xFF0000);
child.graphics.drawRect(0, 0, 100, 20);
child.addEventListener(MouseEvent.CLICK, onClick);
child.addEventListener(MouseEvent.MOUSE_OUT, onOut);
child.addEventListener(MouseEvent.MOUSE_OVER, onOver);
tf = new TextField();
tf.backgroundColor = 0xFF00AA;
tf.background = true;
tf.type = TextFieldType.INPUT;
tf.text = "yo";
tf.y = 100;
this.addChild(tf);
}
private function onOver(e:MouseEvent):void {
child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF);
}
private function onOut(e:MouseEvent):void {
child.transform.colorTransform = new ColorTransform();
}
private function onClick(e:MouseEvent):void {
//try it here...
stage.focus = null;
this.mouseChildren = this.mouseEnabled = false;
//or try it here...
//stage.focus = null;
}
}
}
THX你的答案。找出我在代碼中做的不同。添加stage.focus = null;到您的onClick方法的開始。我不確定它爲什麼會產生這種效果(例如,在我移動或單擊(而不是鼠標滾輪)之前不會觸發mouse_out)。 – jedierikb 2009-07-13 05:38:03