ActionScript3の最近のブログ記事

ActionScript3にて各ブラウザのポップアップブロック回避用

SafariのポップアップブロックとIEでのポップアップブロックの回避方法が異なるため
ブラウザを判別して開き方を変更する。
動作検証:Firebox3.6.3 IE8 Safari4.0.4 google chrome4.1.248.1064
いったんメモ


import flash.external.ExternalInterface;

/**
 * ExternalInterface.callにてユーザーエージェント取得用のJavaScriptを実行
 */
var agent:String = String(ExternalInterface.call("function getBrowser(){return navigator.userAgent;}"));

/*
 * TextLoader(独自カスタムクラス)
 */
//var te:TextLoader = new TextLoader({text:agent,autoSize:"LEFT"});
//addChild(te);

/**
 * ユーザーエージェントの内容で処理を分岐
 * 判別は「agent.indexOf("Safari")」だけでいいのだが一応「agent.indexOf("safari")」も評価
 */
if (agent.indexOf("Safari") != -1 || agent.indexOf("safari") != -1) {
    //Safari用処理
    navigateToURL("./index.html", "_blank");
} else {
    //Safari以外の処理
    ExternalInterface.call("window.open", "http://www.google.com/", "_blank");
}

よく配列などを利用してMovieClipを生成するのですが、
そのときにname属性にIDなどを設定して、
クリックしたときにname属性を取り出してイベントの動作を変えたりするのですが、
その際にtarget.nameを使って取り出すと「instance[番号]」が返ってくるので、
設定したname属性をcurrentTarget.nameを使って取り出します。

 

var objectArray:Array = {1, 2, 3, 4, 5};
var obj:MovieClip;
for(var i:int = 0; i < objectArray.length; i++)
{
	obj = new MovieClip();
	obj.name = "obj"+String(objectArray[i]);
	addChild(obj);
	obj.addEventListener(MouseEvent.MOUSE_UP, upEvent);
}

function upEvent(event:MouseEvent):void
{
	trace(event.target.name);//instance[番号]
	trade(event.currentTarget.name);
}

ふとした案件でTweenerの動きは一緒なのに、MovieClipごとにTweenerの完了後の処理が全てちがうということがあったので、
Tweenerイベント完了後の処理を配列で指定できるか試してみたら動きました。
数が増えれば増えるほど効果が出てきそうですが、切り替えるfunctionの配列番号を何かで指定できるようにしておく必要があり、
今回は、MovieClipの名前に配列番号を仕込んで、マウスオーバー時に配列番号を取り出しています。
onCompleteでもonStartでも使えるので使い方次第では便利かなと・・・
以下テストソースになります。

var objList:Object = [obj0, obj1, obj2];
var tweenerEventList:Object = [functionEvent1, functionEvent2, functionEvent3];

for(var i:int = 0; i < objList.length; i++)
{
	objList[i].addEventListener(MouseEvent.MOUSE_OVER, tweenerEvent);
}

function tweenerEvent(event:MouseEvent):void
{
	var selectNo:int = event.target.name.split("obj").join("");
	Tweener.addTween(objList[selectNo], {alpha:0, time:0.5, onComplete:tweenerEventList[selectNo]});
}

function functionEvent1():void
{
	trace("処理1");
}

function functionEvent2():void
{
	trace("処理2");
}

function functionEvent3():void
{
	trace("処理3");
}

1年以上たって思い出したのですが、
ブログを始めようと思って少しだけ書いてすっかり忘れていました。