Как дочерний спрайт может предотвратить событие мыши от достижения своего родителя? - PullRequest
0 голосов
/ 11 октября 2009

Ниже приведен код для простого проекта ActionScript Flex. Спрайт частично покрывает гиперссылку. Происходит следующее: когда вы наводите курсор мыши на спрайт, если вы тоже наводите курсор мыши на гиперссылку, гиперссылка активируется. Я хочу предотвратить это. Я хочу, чтобы гиперссылка была активирована только тогда, когда на нее наведена мышь - но не когда дом наведен на спрайт, который ее покрывает.

Здесь мы имеем спрайт, который является дочерним элементом текстового поля, в котором находится гиперссылка. Поэтому возникает вопрос (я думаю): как дочерний экранный объект может прервать поток событий, чтобы событие mouseover никогда не доходило до родителя?

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 Ответ

1 голос
/ 11 октября 2009

спрайт, который является дочерним для текстового поля

Неправильно - это невозможно. TextField не является DisplayObjectContainer и, следовательно, не может иметь собственных дочерних элементов. В вашем коде текстовое поле и спрайт являются братьями и сестрами - оба являются потомками класса документа.

как дочерний экранный объект может прервать поток событий, чтобы событие mouseover никогда не доходило до родительского?

Родители могут запретить детям получать события мыши, используя свойство mouseChildren, а не наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...