forked from: イベント止めたいけど止められないす

by 9re forked from イベント止めたいけど止められないす (diff: 21)
♥0 | Line 65 | Modified 2010-01-14 15:12:13 | MIT License
play

ActionScript3 source code

/**
 * Copyright 9re ( http://wonderfl.net/user/9re )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xpWQ
 */

// forked from nariyu's イベント止めたいけど止められないす
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.TextEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	
	[SWF(width = "465", height = "465", backgroundColor = 0xFFFFFF)]
	public class LinkTest extends Sprite
	{
		private var sprite:Sprite;
		private var textField:TextField;
		private var output:TextField;
		
		public function LinkTest()
		{
			super();
			
			// Sprite (コンテナ)
			sprite = new Sprite;
			sprite.addEventListener(MouseEvent.CLICK, sprite_clickHandler);
			sprite.graphics.beginFill(0xEEEEEE);
			sprite.graphics.drawRoundRect(0, 0, 445, 100, 10);
			sprite.graphics.endFill();
			sprite.x = 10;
			sprite.y = 10;
			addChild(sprite);
			
			// Sprite に addChild() するテキストフィールド
			var textFormat:TextFormat = new TextFormat;
			textFormat.font = "Verdana";
			
			textField = new TextField;
			textField.x = 10;
			textField.y = 10;
			
			//textField.wordWrap = true;
			textField.multiline = true;
			textField.defaultTextFormat = textFormat;
			// カーソルがIにならないようにする
			textField.selectable = false;
			textField.htmlText =
				'ほげほげ <a href="event:A"><font color="#003399">リンクAだよ</font></a> ほげほげ ' + "\n" +
				'ほげほげ <a href="event:B"><font color="#003399">リンクBだよ</font></a> ほげほげ ' + "\n" +
				'ほげほげ <a href="event:C"><font color="#003399">リンクCだよ</font></a> ほげほげ ';
			textField.addEventListener(TextEvent.LINK, textField_linkHandler);
			
			// MouseEventを処理するなら大きさは適切な大きさにしておいた方が
			// なにかと便利です
			//textField.width = 425;
			//textField.height = 80;
			// +4 はgutterが2pxだからです
			// http://livedocs.adobe.com/flex/3/langref/flash/text/TextLineMetrics.html
			// 等を御覧下さい
			textField.width = textField.textWidth + 4;
			textField.height = textField.textHeight + 4;
			
			sprite.addChild(textField);
			
			// デバッグ出力用
			output = new TextField;
			output.x = 10;
			output.y = 120;
			output.width = 445;
			output.height = 335;
			output.wordWrap = true;
			output.multiline = true;
			output.border = true;
			output.defaultTextFormat = textFormat;
			output.text = "説明)上のように TextField を内包した Sprite (グレー背景)があります。\n" +
				"「TextField 中のアンカー」以外の場所をクリックした場合は CLICK イベントを処理するけど、アンカーをクリックした場合は " +
				"CLICK イベントを処理したくない。\n" +
				"どうしたらいいんでしょう?\n-----\n";
			addChild(output);
		}
		
		private function sprite_clickHandler(event:MouseEvent):void
		{
			// event.targetとevent.currentTargetの違いについては
			// http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#currentTarget
			if (event.target != event.currentTarget) return;
			
			output.appendText(event.type + "イベント: Sprite をクリックしたよ\n");
		}
		private function textField_linkHandler(event:TextEvent):void
		{
			// このイベントが発生した場合だけ
			// event.stopImmediatePropagation(); とか
			// event.stopPropagation(); で
			// sprite の CLICK イベントを止めたいけど止められない...
			// TextEventの伝播が止まるだけですね
			output.appendText(event.type + "イベント: リンク" + event.text + "をクリックしたよ\n");
		}
	}
}