AS3和Flex一百條常用的知識收藏

【改變輸出swf的尺度,背景顏色或幀頻】

"Navigator"窗框裏右鍵你的項目>選中"Properties">選中"Actionscript Compiler">"Additional compiler arguments"裏輸入你所需要的命令

如想改變背景顏色,請輸入: -default-background-color 0xffffff

 

 

【鼠標座標】

mouseX mouseY

 

【檢查變量類型並返回布爾值】

is

 

【檢查變量類型並返回類型】

typeof

 

【檢查對象類型並返回該對象】

as

 

【是數字但不是有效數字問題】

var quantity:Number = 15 - "rabbits";

trace(typeof quantity); //顯示: "number" , 但它是NaN (not a number)

trace(quantity is Number); //true

trace(quantity != NaN); //false

//使用isNaN()函數檢測:

isNaN(quantity); //true

//檢測變量是否內含有效數字:

!isNaN(quantity); //false

 

【取消默認的嚴格編譯模式】

"Navigator"窗框裏右鍵你的項目>選中"Properties">選中"Actionscript Compiler">取消"Enabel compile-time type checking"選項

 

【基元數據類型和複雜數據類型好比"值類型""引用類型"

基元數據類型類似按值傳遞:

var intOne:int = 1;

var intTwo:int = 1;

trace(intOne == intTwo); //true

 

【複雜數據類型類似按引用傳遞】

var arrayOne:Array = new Array("a", "b");

var arrayTwo:Array = arrayOne;

trace(arrayOne == arrayTwo); //true

//-----------------------------------

var arrayOne:Array = new Array("a", "b");

var arrayTwo:Array = new Array("a", "b");

trace(arrayOne == arrayTwo); //false

 

【優化邏輯AND(&&)OR(||)的小知識】

對於邏輯And(&&):

     除非條件表達式的前半部分爲真,否則,Actionscript不會再去求算邏輯AND運算符的後半部.如果前半部爲假,整個條件表達式一定爲假,所以再去求算後半部就沒效率了.

對於邏輯OR(||):

     除非條件表達式前半部爲假,否則,Actionscript不會再去求算邏輯OR運算符的後半部,如果前半部爲真,整個條件表達式一定爲真.

總結:使用邏輯AND(&&),把結果最可能爲false的表達式放到前面;使用邏輯OR(||),把結果最可能爲true的表達式放到前面.

 

Timer類注意事項】

不要認爲Timer可以極其準確;使用Timer時間間隔不要低於10毫秒.

 

private,protected,internal,public訪問權限】

private:只能在類本身內部訪問,按慣例,命名私有成員時以下劃線"_"開頭;

protected:可以由類本身或任何子類訪問.但這是以實例爲基礎的.換言之,類實例可以訪問自己的保護成員或者父類的保護成員,但不能訪問相同類的其它實例的保護成員,按慣例,命名保護成員時以下劃線"_"開頭;

internal:可以由類本身或者相同包內的任何類訪問;

public:可以在類內部訪問,也可以由類實例訪問,或者聲明爲static,可以直接從類訪問.

 

【一個函數具有未知個數的參數,arguments對象或"...(rest)"符號訪問它的參數】

注意:使用"...(rest)"參數會使 arguments 對象不可用;

private funciton average():void{

     trace(arguments.length); //輸出參數的個數

     // arguments的類型是:object,但可以像訪問數組一樣去訪問它

     trace(arguments[1]); //輸出第二個參數

}

private function average(...argu):void{

     trace(argu[1]); //輸出第二個參數,argu參數名是自定義的.

}

 

【錯誤處理try,catch,finally

private function tryError():void{

     try {

         trace("測試開始-try");

         throwError();

     }catch(errObject:Error) {

         trace("錯誤信息:" + errObject.message);

         trace("測試結束-catch");

         return;

     }finally{

         trace("雖然catch裏已經有return方法,但位於return方法後面的finally裏的代碼依然會被執行.其實無論return方法是在try,還是catch,finally裏的代碼始終會被執行");

     }

     trace("前面已經有return,此處是不會再執行的.除非沒有拋出錯誤,以使catch裏的代碼沒有被執行");

}

private function throwError():void{

     throw new Error("拋出錯誤");

}

 

for...infor each...in的區別】

for...in循環不同的是,for each...in循環中的迭代變量包含屬性所保存的值,而不包含屬性的名稱(或主鍵,索引).

 

【命名包路徑的小技巧】

     使用相應於擁有者和相關項目的包名稱會比較好.按慣例來講,包名稱的開頭應該是逆向的網址名稱.例如,如果Example Corp(examplecorp.com)寫了一些Actionscript3.0,就會把所有類放在com.examplecorp包內(或者 com.examplecorp的子包內).如此一來,如果英國有另一家Example Corp(examplecorp.co.uk)也寫了一些Actionscript3.0,只要使用包uk.co.examplecorp,就可確保 唯一性.

     當類屬於特定應用程序的一部分時,就應該放在該應用程序特定的子包內.例如,Example Corp可能有個應用程序名叫WidgetStore.如果WidgetStore應用程序使用一個名爲ApplicationManager的類,則此 類就應該放在com.examplecorp.widgetstore包內,或者位於該包的子包內.

     按慣例來說,包名稱的開頭是小寫字母.

 

【隱式的取出方法(getter)和設定方法(setter)

public function get count():uint {

     return _count;

}

public function set count(value:uint):uint {

     if(value < 100){

         _count = value;

     }else {

         throw Error();

     }

}

 

【確保類是絕不會有子類,使用final

final public class Example{}

 

super關鍵字的使用】

super(); //父類的構造函數,只能在類實例構造函數內部使用

super.propertyName; //調用父類的屬性,屬性需要聲明爲publicprotected

super.methodName(); //調用父類的方法,方法需要聲明爲publicprotected

 

【建立常數,使用關鍵字const而不是var

static public const EXAMPLE:String = "example";

 

【檢測播放器版本】

flash.system.Capabilities.version

對於8.5版以前的任何Flash Player版本,這種方法都不適用.

 

【判斷客戶端系統】

flash.system.Capabilities.os

 

【檢測播放器類型】

flash.system.Capabilities.playerType

可能的值有:

"StandAlone",用於獨立的 Flash Player

"External",用於外部的 Flash Player 或處於測試模式下

"PlugIn",用於 Flash Player 瀏覽器插件

"ActiveX",用於 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件

 

【檢測系統語言】

flash.system.Capabilities.language

 

【判斷用戶是否啓用了IME(輸入法編輯器)

flash.system.IME.enabled

 

【檢測屏幕的分辨率】

flash.system.Capabilities.screenResolutionX

flash.system.Capabilities.screenResolutionY

 

【把彈出窗口居中的算法】

X = (舞臺寬/2)-(窗口寬/2)

Y = (舞臺高/2)-(窗口高/2)

 

【控制影片配合Player的方式,包括縮放問題】

stage.scaleMode

可供選擇值:flash.display.StageScaleMode

 

【舞臺的對齊方式】

stage.align

可供選擇值:flash.display.StageAlign

flash.system.Capabilities.hasEmbeddedVideo

 

【檢測播放器能 (true) 還是不能 (false) 對視頻流(如來自 Web 攝像頭的視頻流)進行編碼】

flash.system.Capabilities.hasVideoEncoder

 

【顯示 Flash Player 中的"安全設置"面板】

flash.system.Security.showSettings();

可供選擇項:flash.system.SecurityPanel

 

【讓其它域的.swf訪問本域的.swf

在本域的.swf文件里加上:flash.system.Security.allowDomain()

者使用安全策略文件"crossdomain.xml".Flash 8以前,這個文件必須放在.swf所在域的根目錄,現在,你可以使用flash.system.Security.loadPolicyFile(), 定安全策略文件所在的位置.拒絕任何域的做法是在<cross-domain-policy>標籤內什麼也不填,安全策略文件也支持通用字符 "*":

<?xml version="1.0"?>

<!-- http://www.mydomain.com/crossdomain.xml -->

<cross-domain-policy>

     <allow-access-from domain="www.riahome.cn" />

     <allow-access-from domain="*.Y-boy.cn" />

     <allow-access-from domain="210.38.196.48" />

     <allow-access-from domain="*" />

</cross-domain-policy>

 

【數字的不同進制之間的轉換】

parseInt(str:String, radix:uint = 0):Number 返回十進制的數,參數radix表示要分析的數字的基數.如果省略radix,就默認爲10,除非字符串的開頭是"0x","0X""0":

trace(parseInt("0x12")); //設定radix16,輸出:18

trace(parseInt("017")); //設定radix8,輸出:15

或者使用Number,uintint對象的toString(radix)方法.

 

【使用Math.round()對一個數取整,四捨五入】

Math.round()

trace(Math.round(204.499)); //輸出:204

trace(Math.round(401.5)); //輸出:402

 

【使用Math.floor()對一個數向下取整,就是隻要整數部分而不理會小數分】

trace(Math.floor(204.99)); //輸出:204

 

【使用Math.ceil()對一個數向上取整,只要小數部分不爲零,整數部分就加1

trace(Math.ceil(401.01)); //輸出:402

 

【產生一個隨機數】

使用Math.random()產生一個僞隨機數n,其中 0 <= n < 1

 

【把數字取至最近的小數點位,即指定精確度】

1. 決定你要取的數字的小數點位數:例如,如果你想把90.337取成90.34,就表示你要取到兩位小數點位,也就是說你想取至最近的0.01;

2. 讓輸入值除以步驟1所選的數字(此例爲0.01);

3. 使用Math.round()把步驟2所計得的值取成最近的整數;

4. 把步驟3所得的結果乘以步驟2用於除法的那個值.

例如,要把90.337取成兩個小數點位數,可以使用:

trace(Math.round(90.337/0.01)*0.01); //輸出:90.34

 

【把數字取成一個整數的最接近倍數值】

1,這樣會把92.5取成5的最近倍數值:

trace(Math.round(92.5/5)*5); //輸出:95

2,這樣會把92.5取成10的最近倍數值:

trace(Math.round(92.5/10)*10); //輸出:90

 

【在指定數值範圍內獲得隨機數】

//可取範圍:[min, max]

private function randRange(min:Number, max:Number):Number {

     var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;

     return randomNum;

}

應用例子:

模擬投銀幣,即希望得到隨機布爾值(true false): randRange(0, 1);

模擬投骰子,即希望得到隨機六個值: randRange(1, 6);

爲避免被緩存而需要產生一個獨一無二的數字追加在URL尾端,通常最佳方法是取得當前毫秒數.

 

【弧度(radian)與度數(degree)之間的轉換】

從弧度轉爲度數: degrees = radians * 180 / Math.PI

從度數轉爲弧度: radians = degrees * Math.PI / 180

 

【計算兩點之間的距離】

勾股定理: c2 = a2 + b2

假設有兩個影片剪輯mc1mc2,則它們兩點間的距離c:

var c:Number = Math.sqrt(Math.pow(mc1.x - mc2.x, 2) + Math.pow(mc1.y - mc2.y, 2));

 

【模擬圓周運動】

已知圓心o(x0, y0),半徑r和弧度angle,求圓上任意一點P(x, y)的座標:

x = x0 + (Math.cos(angle) * r);

y = y0 + (Math.sin(angle) * r);

注意:舞臺的x軸正方向水平向右,y軸正方向垂直向下.

 

【模擬橢圓運動】

已知圓心o(x0, y0),長軸a,短軸b以及弧度angle,求圓上任意一點P(x, y)的座標:

x = x0 + (Math.cos(angle) * a);

y = y0 + (Math.sin(angle) * b);

 

 

【華氏溫度和攝氏溫度之間的轉換】

華氏溫度 = 攝氏度數 * 9 / 5 + 32

攝氏溫度 = (華氏度數 - 32) * 5 /9

 

【公斤與磅之間的轉換】

公斤 = * 2.2

= 公斤 / 2.2

 

【向數組尾端添加元素】

var array:Array = new Array();

array.push("a", "b");

//向數組尾端添加單一元素也可以這樣:

array[array.length] = "c";

//如果以索引設定的元素不存在,數組本身會自動擴展以包含足夠的元素數目.介於中間的元素會被設爲undefined:

array[5] = "e";

trace(array[4]); //輸出: undefined

 

【向數組開端添加元素】

var array:Array = ["a", "b"];

array.unshift("c", "d");

trace(array); //輸出: c,d,a,b

 

【刪除數組中第一個元素並返回該元素,使用shift()方法】

var letters:Array = new Array("a", "b", "c");

var firstLetter:String = letters.shift();

trace(letters); //輸出: b,c

trace(firstLetter); //輸出: a

 

【刪除數組中最後一個元素並返回該元素的值,使用pop()方法】

var letters:Array = new Array("a", "b", "c");

trace(letters); //輸出: a,b,c

var letter:String = letters.pop();

trace(letters); //輸出: a,b

trace(letter); //輸出: c

 

【刪除數組中的元素,給數組添加新元素並返回刪除的元素,使用splice()方法】

splice(startIndex:int, deleteCount:uint, ... values):Array

startIndex: 一個整數,它指定數組中開始進行插入或刪除的位置處的元素的索引;

deleteCount: 一個整數,它指定要刪除的元素數量;

... values: 用逗號分隔的一個或多個值的可選列表或數組,此列表或數組將插入到此數組中由 startIndex 參數指定的位置.

 

【查找數組中第一個相匹配的元素】

var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];

var match:String = "b";

for(var i:int = 0; i < array.length; i++) {

     if(array[i] == match) {

         trace("Element with index " + i + " found to match " + match);

         //輸出: Element with index 1 found to match b

         break;

     }

}

 

【查找數組中最後一個相匹配的元素】

var array:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];

var match:String = "b";

for(var i:int = array.length - 1; i >= 0; i--) {

     if(array[i] == match) {

         trace("Element with index " + i + " found to match " + match);

         //輸出: Element with index 5 found to match b

         break;

     }

}

 

【把字符串轉成數組】

使用String.split()方法:

var list:String = "I am YoungBoy.";

var words:Array = list.split(" "); //以空格作爲分隔符將字符串切割

trace(words); //輸出: I,am,YoungBoy.

 

【把數組轉成字符串】

使用String.join()方法:

var myArr:Array = new Array("one", "two", "three");

var myStr:String = myArr.join(" and ");

trace(myArr); //輸出: one,two,three

trace(myStr); //輸出: one and two and three

 

【使用對象數組處理相關數據】

var cars:Array = new Array();

cars.push({make:"Mike", year:1997, color:"blue"});

cars.push({make:"Kelly", year:1986, color:"red"});

for(var i:int = 0; i < cars.length; i++) {

     trace(cars[i].make + " - " + cars[i].year + " - " + cars[i].color);

}

//輸出:

//     Mike - 1997 - blue

//     Kelly - 1986 - red

 

【在數組中獲取最小或最大值】

var scores:Array = [10, 4, 15, 8];

scores.sort(Array.NUMERIC);

trace("Minimum: " + scores[0]);

trace("Maximum: " + scores[scores.length - 1]);

 

【使用for ... in語句讀取關聯數組元素】

var myObject:Object = new Object();

myObject.name = "YoungBoy";

myObject.age = 20;

for(var i:String in myObject) {

     trace(i + ": " + myObject[i]);

}

//輸出: name: YoungBoy

//       age: 20

注意: for ... in循環不會顯示對象所有的內建屬性.例如,循環會顯示執行期間新增的特殊屬性,但是,不會列出內建對象的方法,即使都是儲存在對象屬性內.

 

AVM(Actionscript Virtual Machine,虛擬機)和渲染引擎(Rendering Engine)

AVM負責執行Actionscript程序,而渲染引擎則是把對象繪製在顯示器上.

 

【指出容器的顯示清單中有多少顯示對象】

每個容器都有numChildren屬性.

 

【把項目新增至顯示清單】

addChild(child:DisplayObject)

addChildAt(child:DisplayObject, index:int)

index: 添加該子項的索引位置.如果指定當前佔用的索引位置,則該位置以及所有更高位置上的子對象會在子級列表中上移一個位置.

 

【從顯示清單中移除項目】

removeChild(child:DisplayObject)

removeChildAt(index:int)

index: 要刪除的 DisplayObject 的子索引,該子項之上的任何顯示對象的索引位置都減去1.

如果想移除窗口所有子元件,可以結合removeChildAt(),numChildren屬性以及for循環.因爲每次一個子元件被移除時,索引位置都會變化,所以,有兩種方法可以處理所有子元件的移除:

1. 總是移除位置0的子元件;

2. 倒過來移除子元件,也就是從尾端開始.

 

【更改現有子項在顯示對象容器中的位置】

setChildIndex(child:DisplayObject, index:int):void

可能用到的方法:

返回 DisplayObject child 實例的索引位置: getChildIndex(child:DisplayObject):int

返回位於指定索引處的子顯示對象實例: getChildAt(index:int):DisplayObject

: 當子元件移到低於它現在所在位置的索引時,那麼,從標的索引起,直到子元件索引前面的那個索引的所有子元件都會令其索引增加1,而該子元件就會指定至標的 索引.當子元件移到較高索引時,從該子元件索引之上的那個索引起,直到標的索引的所有子元件都會令其索引往下減1,而該子元件就會指定至標的索引值.

 

【關於TextField以垂直方式把文字擺在按鈕表面中心點的小技巧】

textField.y = (_height - textField.textHeight) / 2;

textField.y -= 2; //2個像素以調整偏移量

 

【外部.swf影片載入和互動】

1. 監聽init事件;

2. 透過content屬性存取所載入的影片.

當所載入的影片做好足夠的初始化工作,使其方法和屬性可以接受互動時,init事件就會被髮起.只有在載入器發起init事件後,才能控制影片.所載入的影片還沒初始化就試着與它互動,是會產生執行期間錯誤的.

_loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit); //當載入的.swf的屬性和方法可用時

_loader.load(new URLRequest("ExternalMovie.swf"));

private function handleInit(event:Event):void {

     var movie:* = _loader.content;

     trace(movie.getColor());

     movie.setColor(0xFF0000);

}

 

TextField有兩種類型:動態(dynamic)和輸入(input),默認值爲動態.改變TextField類型方法】

field.type = TextFieldType.INPUT; //selectable屬性默認值爲true

flash.text.TextFieldType.INPUTflash.text.TextFieldType.DYNAMIC

 

【過濾文字輸入】

TextField.restrict = "此處爲可輸入的內容";

field.restrict = "^此處爲禁止輸入的內容";

restrict屬性支持一些類似正則表達式的樣式:

field.restrict = "a-zA-z"; //只允許大小字母

field.restrict = "a-zA-z "; //只允許字母和空格

field.restrict = "0-9"; //只允許數字

field.restrict = "^abcdefg"; //除了小寫字母abcdefg不允許外,其它都允許

field.restrict = "^a-z"; //所有小寫字母都不允許,但是,其它內容都允許,包括大寫字母

field.restrict = "0-9^5"; //只允許數字,5例外

restrict字符包含具有特殊意義的字母(例如-^):

field.restrict = "0-9\-"; //允許數字和破折號

field.restrict = "0-9\^"; //允許數字和^

field.restrict = "0-9\\"; //允許數字和反斜槓

你也可以使用Unicode轉義序列,指定允許的內容.例如:

field.restrict = "^u001A";

注意:Actionscript有區分大小寫的,如果restrict屬性設爲abc,允許字母的大寫形式(A,BC)輸入時會變成小寫對待形式(a,bc),反之亦然.restrict屬性隻影響用戶可以輸入的內容,腳本可將任何文本放入文本字段中.

 

【設定輸入框的最大長度】

TextField.maxChars:int

 

【向TextField追加內容】

TextField.appendText(text:String):void

與通過對 text 屬性使用加法賦值來連接兩個字符串(例如 field.text += moreText)相比,此方法的效率更高.

 

【顯示HTML格式的文字】

TextField.htmlText = "<b>Html text</b>";

持的HTML標籤集有: <b>,<i>,<u>,<font>(face,size以及color屬性),< p>,<br>,<a>,<li>,<img>以及<textformat>( leftmargin,rightmargin,blockindent,indent,leading以及tabstops屬性,相應於 TextFormat類的同名屬性)

 

【縮減空白】

TextField.condenseWhite = true;

刪除具有HTML文本的文本字段中的額外空白(空格,換行符等),如同多數HTML瀏覽器所做的那樣.

注意: 在設置 htmlText 屬性之前設置 condenseWhite 屬性

 

【自動大小調整和對齊】

TextField.autoSize = TextFieldAutoSize.LEFT;

可選之值:

flash.text.TextFieldAutoSize.CENTER

flash.text.TextFieldAutoSize.LEFT

flash.text.TextFieldAutoSize.NONE

flash.text.TextFieldAutoSize.RIGHT

 

【指示文本字段是否自動換行】

TextField.wordWrap = true; //自動換行

 

【用程序手段滾動文字】

水平方向以像素爲單位,而垂直方向以行做單位:

scrollV: 指出文字框可見區域的最頂行,可讀寫;

bottomScrollV: 指出文字框內最底端可見行,只讀;

maxScrollV: scrollV的最大值,只讀;

numLines: 定義多行文本字段中的文本行數,只讀;

TextField.scrollV = field.maxScrollV; //滾動到最後一頁

 

【響應滾動事件】

field.addEventListener(Event.SCROLL, onTextScroll);

 

【樣式化文字的方法】

1. 使用HTML標籤進行樣式化;

2. 使用TextFormat對象;

3. 使用CSS.

例如: HTML是用<font>標籤,TextFormat對象是設定font屬性,CSS是使用font-family屬性的.

受支持的層疊樣式表(CSS)屬性和值,及其相應的Actionscript屬性名稱(小括號內):

color(color),display(display),font-family(fontFamily),font-size(fontSize),font-style(fontStyle),font-weight(fontWeight),kerning(kerning),leading(leading),letter-spacing(letterSpacing),margin-left(marginLeft),margin-right(marginRight),text-align(textAlign),text-decoration(textDecoration),text-indent(textIndent)

受支持的HTML實體: <(小於號: <), >(大於號: >), &(: &), "(雙引號: "), '(撇號,單引號: ')

其中樣式對象的兩種寫法:

寫法一:

var sampleStyle:Object = new Object();

sampleStyle.color = "#FFFFFF";

sampleStyle.textAlign = "center";

css.setStyle(".sample", sampleStyle);

寫法二:

var sampleStyle:Object = {color: "#FFFFFF", textAlign: "center"};

css.setStyle(".sample", sampleStyle);

 

【對用戶輸入的文字進行樣式化】

使用defaultTextFormat屬性,樣式會施加至用戶鍵入輸入框的文字身上:

var formatter:TextFormat = new TextFormat();

formatter.color = 0x0000FF; //把文字變成藍色

field.defaultTextFormat = formatter;

 

【對現有文字的一部分進行樣式化】

TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void

 

【設定文字框的字體】

例子:

HTML: field.htmlText = "<font face='Arial'>Formatted text</font>";

TextFormat: formatter.font = "Arial";

CSS: P{ font-family: Arial; }

也可以使用以逗號隔開的字體清單: formatter.font = "Arial, Verdana, Helvetica";

注意:

字體和字體羣組不同.字體羣組有三種: _sans,_serif以及_typewriter.

_sans羣組一般就是指ArialHelvetica這種字體;

_serif羣組一般就是指TimesTimes New Roman這種字體;

_typewriter羣組一般就是指CourierCourier New這種字體.

 

【嵌入字體】

使用[Embed]後設標籤.[Embed]後設標籤應該出現在Actionscript文件中,處於類宣告之外.你可以內嵌TrueType字體或系統字體.內嵌TrueType字體時的語法:

[Embed(source="pathToTtfFile", fontName="FontName", mimeType="application/x-font-truetype")]

pathToTtfFile: ttf文件的路徑,TrueType字體的路徑可以是相對的,也可以是絕對的;

FontName: 字體名稱;

內嵌系統字體的語法:

[Embed(systemFont="Times New Roman", fontName="Times New Roman", mimeType="application/x-font-truetype")]

fontName: 以相同名稱作爲實際系統字體名稱.

: 在使用嵌入字體時,要把TextFieldembedFonts屬性設爲true,這樣TextField只能用內嵌字體了.如果你試着替 embedFonts設爲trueTextField使用設備字體,什麼都不會顯示.如果embedFonts設爲true,就無法指定以逗號相隔的字 體清單.

 

【建立可以旋轉的文字】

使用內嵌字體.當你旋轉文字框時,設備字體就會消失.

 

【顯示Unicode文字】

1. 從外部來源載入Unicode文字;

2. 假如你的編輯器支持Unicode( Flex Builder),則可以直接在Actionscript程序中使用該字符;

3. 使用Unicode轉義字符,Actionscript裏所有Unicode轉義字符都以u開頭,後面再跟四位十六進制數字.

注意: 如果你想取得Unicode字符,Windows下使用: 開始>所有程序>附件>系統工具>字符映射表.

 

【把Flash Player的焦點帶給文字框】

stage.focus = field;

把焦點移除:

stage.focus = null;

注意: .swf文件首次載入至網頁瀏覽器時,並沒有焦點.因此,以程序的方式把焦點指定給Flash應用程序的一個元素前,必須先把焦點移至Flash Player.

 

【以Actionscript選取文字】

使用TextField.setSelection(beginIndex:int, endIndex:int):void

爲了可以正常選取文字,文字框必須具有焦點:

stage.focus = field; //把焦點設給文字框

field.text = "This is example text"; //設定文字

field.setSelection(0, 4); //"This"這個單詞以高亮顯示

使用只讀的selectionBeginIndexselectionEndIndex屬性訪問所選取的字符範圍的索引.

 

【在文字內設定安插點(遊標位置)並訪問遊標位置的索引值】

可以使用TextField.setSelection()把起始和結尾的索引參數都設成相同值,在文字內設定遊標位置(假設具有焦點):

field.setSelection(0, 0); //在第一個字符前擺放安插點

trace(field.caretIndex); //輸出遊標位置的索引值

 

【當文本字段受到選取或取消選取時給予響應】

獲得焦點時: FocusEvent.FOCUS_IN

失去焦點時: FocusEvent.FOCUS_OUT

通過鍵盤(Tab)把焦點移除時: FocusEvent.KEY_FOCUS_CHANGE

通過鼠標把焦點移除時: FocusEvent.MOUSE_FOCUS_CHANGE

FocusEvent 類有一個relatedObject屬性.FOCUS_IN事件而言,relatedObject屬性是剛纔擁有焦點的對象的引用地址;對於 FOCUS_OUT,KEY_FOCUS_CHANGE以及MOUSE_FOCUS_CHANGE事件,relatedObject屬性是剛接收到焦點的 對象的引用地址.

FOCUS_INFOCUS_OUT事件都是在焦點改變後發生的,所以兩者都是不可取消的事件.對於KEY_FOCUS_CHANGEMOUSE_FOCUS_CHANGE事件,可以使用FocusEvent.preventDefault()方法取消默認行爲:

field.addEventListener(FocusEvent.KEY_FOCUS_CHANGE, onKeyFocus);

private function onKeyFocus(event:FocusEvent):void {

     if(field.text == "") {

         event.preventDefault(); //field沒有任何文字前,不允許使用Tab鍵把焦點移除

     }

     //event.relatedObject就是剛纔擁有焦點的對象的引用地址,即下一個獲得焦點的對象的


發佈了29 篇原創文章 · 獲贊 11 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章