2009-10-11 6 views
0

Vous trouverez ci-dessous le code d'un simple projet Flex actionscript. Un sprite couvre partiellement un lien hypertexte. Ce qui se passe est que lorsque vous passez la souris sur l'image-objet, si vous passez également le lien hypertexte, l'hyperlien est activé. Je veux empêcher ça. Je veux que le lien hypertexte soit activé seulement quand la souris survole dessus - mais pas quand la maison survole le sprite qui le recouvre.Comment un sprite enfant peut-il empêcher un événement souris d'atteindre son parent?

Ce que nous avons ici est un sprite qui est un enfant du champ de texte dans lequel réside le lien hypertexte. Par conséquent la question est (je pense): comment un objet d'affichage d'enfant peut-il interrompre le flux d'événement de sorte que l'événement mouseover n'atteigne jamais le parent?

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; 
    } 

} 
} 

Répondre

1
sprite

qui est un enfant du textfield

Wrong - il est impossible. TextField n'est pas un objet DisplayObjectContainer et ne peut donc pas avoir d'enfants. Dans votre champ de texte de code et l'image-objet sont frères et sœurs - les deux sont des enfants de la classe de document. Comment un objet d'affichage enfant peut-il interrompre le flux d'événements de sorte que l'événement mouseover n'atteigne jamais le parent? Les parents peuvent empêcher les enfants d'obtenir des événements de souris en utilisant la propriété mouseChildren, et non l'inverse.

+0

Oui, c'est vrai, mon erreur, merci. Mais le problème persiste, s'il est correctement reformulé: comment puis-je faire en sorte que l'événement mouseover ne s'applique qu'à l'image-objet lorsque le curseur est sur les deux? – David

+0

J'ai testé votre code. Même après avoir supprimé le usehandcursor et le buttonmode de l'image-objet, le champ de texte fait passer la souris. Fait intéressant, il n'y a pas de clic de souris. semble être un bug. Voyons voir si quelqu'un vient avec une explication. – Amarghosh

+0

OK, eh bien, étant donné que le titre de ce poste est faux/trompeur, permettez-moi de le réitérer et de le rediffuser. – David

Questions connexes