子Sprite如何阻止鼠标事件到达其父级?

时间:2009-10-11 12:43:37

标签: flex actionscript-3 events parent-child

下面是一个简单的Flex actionscript项目的代码。精灵部分覆盖超链接。发生的事情是,当您将鼠标悬停在精灵上时,如果您还将鼠标悬停在超链接上,则会激活超链接。我想防止这种情况。我希望只有当鼠标悬停在超链接上时才会激活超链接 - 但是当房子悬停在覆盖它的精灵上时不会激活。

我们这里有一个精灵,它是超链接所在的文本域的子节点。因此问题是(我认为):子显示对象如何中断事件流,以便鼠标悬停事件永远不会到达父级?

package {
import flash.display.Sprite;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TextEvent;
import flash.external.ExternalInterface;
import flash.filters.BevelFilter;
import flash.geom.Rectangle;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.text.Font;
import flash.text.StyleSheet;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.utils.setTimeout;


public class SpriteHyperlinkTest extends Sprite
{
    private var style : StyleSheet = new StyleSheet();
    public function SpriteHyperlinkTest()
    {
        createOutputTextField();
    }

    public var output_txt : TextField;

    private function createOutputTextField() : void {

        ////////////// SETUP  TEXTFIELD ///////////////

        var hover : Object = new Object();
        hover.fontWeight = "bold";
        hover.color = "#0000FF";
        var link : Object = new Object();
        link.fontWeight = "bold";
        link.textDecoration = "underline";
        link.color = "#555555";
        var active : Object = new Object();
        active.fontWeight = "bold";
        active.color = "#FF0000";

        var visited : Object = new Object();
        visited.fontWeight = "bold";
        visited.color = "#cc0099";
        visited.textDecoration = "underline";

        style.setStyle("a:link", link);
        style.setStyle("a:hover", hover);
        style.setStyle("a:active", active);
        style.setStyle(".visited", visited);
        output_txt = new TextField();
        output_txt.backgroundColor = 0xFFFFFF;
        output_txt.background = true;
        //output_txt.embedFonts = true;
        output_txt.wordWrap = true;
        output_txt.multiline = true;

        output_txt.name = "output_txt";         
        output_txt.x = 100;
        output_txt.y = 100;
        output_txt.width = 300;
        output_txt.height = 200;

        output_txt.htmlText = "<b>sample <a href='http://www.google.com'>hyperlink text</a></b>"; 
        addChild(output_txt);
         var mySprite:Sprite = new Sprite();
         mySprite.graphics.lineStyle(.5,0x000000);
         mySprite.graphics.beginFill(0xff0000, 1);
         mySprite.alpha = .7;
         mySprite.graphics.drawRect(100, 100, 90, 20);
         mySprite.graphics.endFill();
         mySprite.useHandCursor = true;
         mySprite.mouseChildren = true;
         mySprite.buttonMode = true;
         mySprite.name = "Sprite1";
         this.addChild(mySprite);

         output_txt.styleSheet = style;
    }

}
}

1 个答案:

答案 0 :(得分:1)

  

sprite是文本域的子项

错了 - 这是不可能的。 TextField不是DisplayObjectContainer,因此不能拥有自己的子级。在您的代码文本字段中,精灵是兄弟姐妹 - 两者都是文档类的子代。

  

子显示对象如何中断事件流,以便鼠标悬停事件永远不会到达父级?

家长可以使用mouseChildren属性阻止孩子获取鼠标事件,而不是其他方式。