2009-10-11 93 views
0

下面是一个简单的Flex动作脚本项目的代码。精灵部分覆盖超链接。发生什么事情是,当你将鼠标悬停在精灵上时,如果你还在超链接上悬停,超链接将被激活。我想阻止这一点。我希望只有当鼠标悬停在它上面时才能激活超链接 - 但是当房屋悬停在覆盖它的精灵之外时不会。小孩Sprite如何防止鼠标事件到达其父项?

我们这里有一个精灵,它是超链接所在的文本字段的子节点。因此,问题是(我认为):子显示对象如何中断事件流,以便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

精灵这是文本框

错的孩子 - 这是不可能的。 TextField不是DisplayObjectContainer,因此不能拥有任何自己的子元素。在您的代码文本字段和精灵是兄弟姐妹 - 都是文档类的子项。

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

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

+0

是的,对,我的错误,谢谢。但问题仍然存在,如果正确地转述:如何让鼠标悬停事件只适用于精灵当光标结束? – David 2009-10-11 13:36:23

+0

我测试了你的代码。即使从精灵中移除usehandcursor和buttonmode之后,文本字段也会将鼠标移过。有趣的是,它不会点击鼠标。看起来像一个错误。让我们看看是否有人提出解释。 – Amarghosh 2009-10-11 13:51:25

+0

好的,好吧,考虑到这篇文章的标题是错误的/误导性的,让我重新编辑它并重新发布。 – David 2009-10-11 23:01:46

相关问题