AS3.0 建立函數執行佇列




殿堂之路這本書有提到使用函數的技巧,忙裡偷閒來練習一下。
場景上有三個影片片段,依照按下按鈕的順序依續播放,一個播放完了之後,才會播放下一個。

var funAry:Array=new Array();
var quee:int=0;//剩餘要執行的工作數量
function enterFrameFun(e:Event){
e.target.currentFrame_txt.text=String(e.target.currentFrame);
if(e.target.currentFrame==e.target.totalFrames){
e.target.gotoAndStop(1);
e.target.currentFrame_txt.text="1";
e.target.removeEventListener(e.type,arguments.callee);
quee--;//一個播放完了,工作數量減1
playNow();//播放下一個
}
}
var funA:Function=function(){
mcA.gotoAndPlay(1);
mcA.addEventListener(Event.ENTER_FRAME,enterFrameFun);
}

var funB:Function=function(){
mcB.gotoAndPlay(1);
mcB.addEventListener(Event.ENTER_FRAME,enterFrameFun);
}
var funC:Function=function(){
mcC.gotoAndPlay(1);
mcC.addEventListener(Event.ENTER_FRAME,enterFrameFun);
}

btnA.addEventListener(MouseEvent.CLICK,function(e:Event){
addQuee(funA);
});
btnB.addEventListener(MouseEvent.CLICK,function(e:Event){
addQuee(funB);
});
btnC.addEventListener(MouseEvent.CLICK,function(e:Event){
addQuee(funC);
});
function addQuee(fun:Function){//將工作排入序列中
quee++;
funAry.push(fun);
if(quee==1){//工作數量=1,表示目前沒有播放
playNow();//立即播放
}
}
function playNow(){//把存在序列的工作取出,並且執行
if(funAry.length>=1){
var fun=funAry.shift();
fun();
}
}


原檔下載

AS3.0 把JS語法寫在AS裡

懶得改兩邊程式碼的懶人做法…

先宣告XML變數存JS語法

public static var alertFun:XML = new XML(
< script >
< ![CDATA[
function () {
alert("only Test");
}
]] >
< /script >
);



利用ExternalInterface.call呼叫JS:
(使用ExternalInterface要先 import flash.external.ExternalInterface;)

ExternalInterface.call(alertFun);//呼叫JS Function


範例下載(使用FD建立)

用JS控制CSS時,發生的問題

今天用JS控制Div的出現或隱藏,卻發生了神秘事件,幸有高人提醒,不然我又不知道搞多久。
事情是這樣的:畫面一開始要隱藏DIV,按了按鈕以後,再顯示DIV。

所以我先設了隱藏DIV的CSS(div的id是mydiv):

< style >
#mydiv{
display:none;
}
< /style >

JS要去顯示它,所以就寫了:

< script >
function showDiv(){
var divObj=document.getElementById('mydiv');
divObj.style.display='';
}
< /script >


我HTML的body

< body >
< div id="mydiv">This is div< /div >
< input onclick="showDiv();" value="Click Me To Show Div" type="button" >


結果…JS一點作用都沒有。

解決辦法就是:
把< style >拿掉,CSS直接下在DIV標籤上:

< div id="mydiv" style="display:none" >

雖然問題解決了,但我還是搞不懂為什麼會發生這種事=.=
註:以上為IE語法
Category: , 0 意見