AS3 杂项

1.判读是数字但不是有效数字问题
var quantity:Number = 15 - "rabbits";
trace(typeof quantity); //显示: "number" , 但它是NaN (not a number)
trace(quantity is Number); //true
trace(quantity != NaN); //false

2.检测系统语
flash.system.Capabilities.language:String

3.判断用户是否启用了IME(输入法编辑器)
flash.system.IME.enabled

4.把弹出窗口居中的算法
X = (舞台宽/2)-(窗口宽/2)
Y = (舞台高/2)-(窗口高/2)

5.舞台的对齐方式
stage.align
可供选择值:flash.display.StageAlign

6.隐藏Flash Player的右键菜单
stage.showDefaultContextMenu = false;

7.让其它域的.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>

8.在数组中获取最小或最大值
var scores:Array = [10, 4, 15, 8];
scores.sort(Array.NUMERIC);
trace("Minimum: " + scores[0]);
trace("Maximum: " + scores[scores.length - 1]);

9.对嵌入外部.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);
}

10.过滤文字输入

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,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.

11.设定输入框的最大长度
TextField.maxChars:int

12.向TextField追加内容
TextField.appendText(text:String):void
与通过对 text 属性使用加法赋值来连接两个字符串(例如 field.text += moreText)相比,此方法的效率更高.

13.显示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类的同名属性)

14.缩减空白
TextField.condenseWhite = true;
删除具有HTML文本的文本字段中的额外空白(空格,换行符等),如同多数HTML浏览器所做的那样.
注意: 在设置 htmlText 属性之前设置 condenseWhite 属性

15.自动大小调整和对齐
TextField.autoSize = TextFieldAutoSize.LEFT;
可选之值:
flash.text.TextFieldAutoSize.CENTER
flash.text.TextFieldAutoSize.LEFT
flash.text.TextFieldAutoSize.NONE
flash.text.TextFieldAutoSize.RIGHT

16指示文本字段是否自动换行
TextField.wordWrap = true; //自动换行

17.用程序手段滚动文字
水平方向以像素为单位,而垂直方向以行做单位:
scrollV: 指出文字框可见区域的最顶行,可读写;
bottomScrollV: 指出文字框内最底端可见行,只读;
maxScrollV: scrollV的最大值,只读;
numLines: 定义多行文本字段中的文本行数,只读;
TextField.scrollV = field.maxScrollV; //滚动到最后一页

18.响应滚动事件
field.addEventListener(Event.SCROLL, onTextScroll);

19.样式化文字的方法
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);

20.对用户输入的文字进行样式化
使用defaultTextFormat属性,样式会施加至用户键入输入框的文字身上:
var formatter:TextFormat = new TextFormat();
formatter.color = 0x0000FF; //把文字变成蓝色
field.defaultTextFormat = formatter;

21.对现有文字的一部分进行样式化
TextFormat.setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void

22.设定文字框的字体
例子:
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群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier New这种字体.


23.把Flash Player的焦点带给文字框
stage.focus = field;
把焦点移除:
stage.focus = null;
注意: 当.swf文件首次载入至网页浏览器时,并没有焦点.因此,以程序的方式把焦点指定给Flash应用程序的一个元素前,必须先把焦点移至Flash Player.

24.以ActionScript选取文字
使用TextField.setSelection(beginIndex:int, endIndex:int):void
为了可以正常选取文字,文字框必须具有焦点:
stage.focus = field; //把焦点设给文字框
field.text = "This is example text"; //设定文字
field.setSelection(0, 4); //把"This"这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.

25.在文字内设定安插点(游标位置)并访问游标位置的索引值
可以使用TextField.setSelection()把起始和结尾的索引参数都设成相同值,在文字内设定游标位置(假设具有焦点):
field.setSelection(0, 0); //在第一个字符前摆放安插点
trace(field.caretIndex); //输出游标位置的索引值

26.当文本字段受到选取或取消选取时给予响应
获得焦点时: 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_IN和FOCUS_OUT事件都是在焦点改变后发生的,所以两者都是不可取消的事件.对于KEY_FOCUS_CHANGE和MOUSE_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就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址
}

27.响应用户的输入行为
field.addEventListener(TextEvent.TEXT_INPUT, onTextInput);
private function onTextInput(event:TextEvent):void {
    if(event.text == "a" && field.length == 0) {
        event.preventDefault(); //TEXT_INPUT是可以取消的事件.TextEvent有一个text属性,内含用户所输入的的字符.此例子确保用户输入的第一个字母不是"a"
    }
}

28.把超链接加入文字
打开网页:
例子1:
var css:StyleSheet = new StyleSheet();
css.parseCSS("a{color:#0000FF;} a:hover{text-decoration:underline;}");
field.styleSheet = css;
field.htmlText = "<a href='http://www.riahome.cn' target='_blank'>Link text</a>";
例子2:
field.text = "Link text";
var formatter:TextFormat = new TextFormat();
formatter.url = "http://www.riahome.cn";
formatter.target = "_blank";
field.setTextFormat(formatter);
打开Email:
field.text = "Link text";
var formatter:TextFormat = new TextFormat();
formatter.url = "mailto:[email protected]";
field.setTextFormat(formatter);
使用event协议,打开ActionScript方法:
field.htmlText = "<a href='event:http://www.riahome.cn'>www.RIAHome.cn</a>";
field.addEventListener(TextEvent.LINK, onClickHyperlink);
private function onClickHyperlink(event:TextEvent):void {
    trace(event.text); //输出: http://www.riahome.cn
}

29.精确获取某字符的索引值
在 x 和 y 参数指定的位置返回从零开始的字符索引值
TextField.getCharIndexAtPoint(x:Number, y:Number):int
例子:
field.getCharIndexAtPoint(mouseX, mouseY); //返回鼠标位置上的该字符的索引值

30.精确获取某字符的边框区域
TextField.getCharBoundaries(charIndex:int):Rectangle
通过读取Rectangle的x,y,width以及height等属性来确定该字符的边框区域范围.

31.精确获取某行的索引值
在 x 和 y 参数指定的位置返回从零开始的行索引值
TextField.getLineIndexAtPoint(x:Number, y:Number):int
field.getLineIndexAtPoint(mouseX, mouseY); //返回鼠标位置上的该行的索引值

32.获取指定索引值处的字符所在行的行索引值
TextField.getLineIndexOfChar(charIndex:int):int

33.获取指定行的字符数
TextField.getLineLength(lineIndex:int):int

34.获取指定索引值处的行所包含的字符
TextField.getLineText(lineIndex:int):String

35.获取指定行索引所在行的第一个字符的索引值
TextField.getLineOffset(lineIndex:int):int

36.获取指定文本行的度量信息
TextField.getLineMetrics(lineIndex:int):TextLineMetrics
TextLineMetrics类包含文本字段中某行文本的文本位置和度量值的相关信息,帮助文档里有深入的图解.

37.获取指定索引处的字符所在段落内的第一个字符索引值
如果给定一个字符索引,则返回同一段落中第一个字符的索引
TextField.getFirstCharInParagraph(charIndex:int):int

38.获取指定索引处的字符所在段落内的字符数
TextField.getParagraphLength(charIndex:int):int

39.替换所选文字
TextField.replaceSelectedText(value:String):void
可以使用此方法插入和删除文本而不破坏其余文本的字符和段落格式.

40.替换指定范围的文本
TextField.replaceText(beginIndex:int, endIndex:int, newText:String):void
注意: 如果对文本字段应用了样式表,则该方法不起作用

41.以指定方向和速度移动元件
speed: 目标速度
radians: speed与x轴的夹角,弧度
vx = Math.cos(radians) * speed;
vy = Math.sin(radians) * speed;

42.缓动动画算法
targetX,targetY: 目标坐标;
easingSpeed: 每次移动分数,范围0到1;
var vx:Number = (targetX - sprite.x) * easingSpeed;
var vy:Number = (targetY - sprite.y) * easingSpeed;
sprite.x += vx;
sprite.y += vy;
注意: 在非常逼近目标点时,往往找出通往目标点的距离,如果其值少于特定值,就应该停止该缓动.

43计算.两点间的角度
Math.atan2(y:Number, x:Number):Number
y: 两点间的垂直距离
x: 两点间的水平距离
返回一个以弧度为单位的角度,返回值介于正PI和负PI之间.

44.遍历Application中的组件
flex3:
从一个组件获取application
this.parentApplication as Application;
检索Application中的组件
Application.application.component.id;
flex4:
从一个组件获取application
var child:Object = IFlexDisplayObject(DisplayObjectContainer(canvas).getChildAt(i));  
this.parentApplication
检索Application中的组件
FlexGlobals.topLevelApplication

45.过滤ArrayList中的数据
<s:ArrayCollection id="collection">
<fx:Object name="Martin Foo" age="25" />
<fx:Object name="Joe Bar" age="15" />
<fx:Object name="Joe Baz" age="23" />
</s:ArrayCollection>
<fx:Script>
<![CDATA[
	private function applyFilter():void
	{
		collection.filterFunction = filterFunc;
		collection.refresh();
	}
	private function filterFunc(value:Object):Object
	{
		return (Number(value.age) > 21);
	}
]]>
</fx:Script>


import mx.collections.Sort;
private function checkExistence():int
{
var sort:Sort = new Sort();
return sort.findItem( collection.source,
{name:nameTI.text, age:Number(ageTI.text)},
Sort.ANY_INDEX_MODE );
}

private function getOldest():void
{
var sort:Sort = new Sort();
sort.fields = [new SortField("age", false, true)];
collection.sort = sort;
collection.refresh();
trace( collection.getItemAt(0).age + " " + collection.getItemAt(0).name );
}

private var coll:ArrayCollection = new ArrayCollection();
coll.addEventListener(CollectionEvent.COLLECTION_CHANGE, collChangeHandler);

private function collChangeHandler(event:CollectionEvent):void{   
var item:Object;   
var updatedObj:Object;   
var i:int;   
if(event.kind == CollectionEventKind.UPDATE){   
for(i=0;i < event.items.length;i++){   
item = event.items;   
lblStatus.text=item.toString();   
updatedObj = new Object;   
updatedObj.operation = "update"  
//updatedObj.id = item.source.id;   
//updatedObj.property = item.property;   
//updatedObj.value = item.source[item.property];   
dataToUpdate.push(updatedObj);   
}   
}else if(event.kind == CollectionEventKind.REMOVE){   
for(i=0;i< event.items.length;i++){   
item = event.items;   
updatedObj = new Object;   
updatedObj.operation = "delete";   
//updatedObj.id = item.id;   
dataToUpdate.push(updatedObj);   
}   
}   
if(chkAutoUpdate.selected){   
sendDataAction();   
}   
} 


你可能感兴趣的:(Flex)