`

AS3经验之谈

 
阅读更多
【改变输出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...in与for 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; //调用父类的属性,属性需要声明为public或protected
super.methodName(); //调用父类的方法,方法需要声明为public或protected
【建立常数,使用关键字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 Player的右键菜单】
stage.showDefaultContextMenu = false;
【检测系统是否具有音频功能】
flash.system.Capabilities.hasAudio
【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】
flash.system.Capabilities.hasMP3
【检测播放器能 (true) 还是不能 (false) 播放流式视频】
flash.system.Capabilities.hasStreamingVideo
【检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行】
flash.system.Capabilities.hasEmbeddedVideo

外部.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.INPUT和flash.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,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.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>,
,<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群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier 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: 以相同名称作为实际系统字体名称.
注 意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替 embedFonts设为true的TextField使用设备字体,什么都不会显示.如果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"这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.
【在文字内设定安插点(游标位置)并访问游标位置的索引值】
可以使用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_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就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址
}


外部.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.INPUT和flash.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,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.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>,
,<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群组一般就是指Arial或Helvetica这种字体;
_serif群组一般就是指Times或Times New Roman这种字体;
_typewriter群组一般就是指Courier或Courier 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: 以相同名称作为实际系统字体名称.
注 意: 在使用嵌入字体时,要把TextField的embedFonts属性设为true,这样TextField只能用内嵌字体了.如果你试着替 embedFonts设为true的TextField使用设备字体,什么都不会显示.如果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"这个单词以高亮显示
使用只读的selectionBeginIndex和selectionEndIndex属性访问所选取的字符范围的索引.
【在文字内设定安插点(游标位置)并访问游标位置的索引值】
可以使用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_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就是刚才拥有焦点的对象的引用地址,即下一个获得焦点的对象的引用地址
}
分享到:
评论

相关推荐

    Javascript调试脚本的经验之谈第1/2页

    编程实际上是一种能随着时间不断飞快进步的技术。但是不管变得多么熟练,你仍然要花一些时间调试你的代码。...注意一般性错误 3.编码之前先想好 ——————————————————————————– 如果JavaScrip

    中考英语作文万能句子【经典】终稿.docx

    **3. 现在,……,它们给我们的日常生活带来了许多危害。首先,……;其次,……。更为糟糕的是……。** - **应用场景**:适用于讨论问题的负面影响。 - **解析**:这种句式通常用于讨论某个现象或行为带来的负面...

    10年呕心沥血的cad应用技巧!

    - **保存文件:** “SAVE”或“SAVEAS”用于保存工作成果。 - **绘制直线:** “LINE”命令。 - **绘制圆:** “CIRCLE”命令。 - **移动对象:** “MOVE”命令。 - **复制对象:** “COPY”命令。 - **删除对象:**...

    linux内核 0.11版本源码 带中文注释

    * calls - which means inline code for fork too, as otherwise we * would use the stack upon exit from 'fork()'. * * Actually only pause and fork are needed inline, so that there * won't be any ...

    网络技术-文件服务器-远程访问-个人应用实践Flask-Fi-1744736795.zip

    java入门 - 方法的使用网络技术_文件服务器_远程访问_个人应用实践Flask_Fi_1744736795.zip

    光伏系统中基于MPPT算法与PI双闭环控制的48V直流输出稳定性优化

    内容概要:本文深入探讨了光伏系统中用于稳定直流输出电压的关键技术,主要包括最大功率点跟踪(MPPT)算法、Boost升压电路和电池侧电压电流PI双闭环控制。MPPT算法通过实时监测光伏板的电压和电流,调整电路工作状态使光伏板始终处于最大功率点附近。Boost电路负责将光伏板输出的较低电压提升到所需的较高电压水平。而电池侧的电压电流PI双闭环控制系统,则确保电池在充放电过程中保持稳定。文中还提供了具体的Python代码示例,展示了这些技术的实际应用方法。 适合人群:从事光伏系统设计、开发与维护的专业技术人员,尤其是对提高光伏系统效率感兴趣的工程师。 使用场景及目标:适用于需要构建高效稳定的光伏发电系统的场合,旨在通过优化MPPT算法、Boost电路设计和电池管理策略,实现光伏系统直流输出电压的稳定性和可靠性。 其他说明:文中不仅介绍了理论概念和技术细节,还给出了实际编码实例,帮助读者更好地理解和掌握相关技术的应用。此外,强调了各组件之间的协调运作对于整个系统性能的重要性。

    基于ssm+jsp的手办商城管理系统(源码+数据库)-268

    基于ssm+jsp的手办商城管理系统:前端 jsp、jquery、bootstrap,后端 maven、springmvc、spring、mybatis;角色分为管理员、用户;集成商品信息、购物车、我的订单、客服、商品管理等功能于一体的系统。 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    基于springboot的高校教育综合管理系统(源码+数据库)231

    基于springboot的高校教育综合管理系统:前端 html、jquery、layui,后端 maven、springmvc、spring、mybatis;角色分为管理员、老师、学生;集成宿舍管理、教评管理、排课管理、考试管理等功能于一体的系统。 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>JDK 1.8</b>

    【医疗人工智能】基于NCCN指南的乳腺癌个性化治疗计划:Agentic-RAG与Graph-RAG方法性能对比及临床应用评估AI驱动的方法

    内容概要:本文介绍了一种基于NCCN(国家综合癌症网络)指南的人工智能工具,用于为乳腺癌患者提供个性化治疗方案。研究提出了两种AI驱动的方法:Agentic-RAG(检索增强生成)和Graph-RAG。Agentic-RAG通过三个步骤选择临床标题、检索匹配的JSON内容并迭代优化推荐,确保治疗建议的准确性。Graph-RAG则将JSON数据转换为文本并通过大型语言模型(LLM)进行总结,再映射成图结构表示关键治疗关系,最终生成推荐。实验结果显示,Agentic-RAG实现了100%的指南依从率,无幻觉或错误治疗;Graph-RAG达到95.8%的依从率,仅有一例错误治疗。两者均提供了详细的治疗建议,并引用了具体的NCCN文档页码。; 适合人群:从事肿瘤学研究和临床工作的医生、研究人员以及对AI在医疗领域应用感兴趣的科技工作者。; 使用场景及目标:①帮助医生快速获取符合NCCN指南的个性化乳腺癌治疗方案;②提高医生对复杂治疗指南的理解和应用效率;③支持临床决策,确保治疗方案的准确性和透明度。; 其他说明:研究强调了Agentic-RAG和Graph-RAG在处理复杂医学指南方面的优势,特别是在提供详细、可追溯的治疗建议方面。未来的工作将扩展测试范围,涵盖更多类型的癌症,并评估系统在实际临床环境中的表现。此外,系统与电子健康记录(EHR)的集成将进一步提升其临床应用价值。

    MATLAB实现K-Medoids聚类算法及其应用

    内容概要:本文详细介绍了K-Medoids聚类算法的MATLAB实现,涵盖了数据导入、算法核心逻辑、可视化展示等多个方面。首先,通过鸢尾花数据集展示了如何导入数据并进行初步处理。接着,深入讲解了K-Medoids算法的关键步骤,如选择初始medoids、计算距离矩阵、分配样本到最近的medoid以及更新medoids。文中还强调了该算法相较于K-Means的优势,即对异常点更为稳健。最后,通过可视化手段展示了聚类结果,帮助读者更好地理解和验证算法的效果。 适合人群:具有一定MATLAB编程基础的研究人员、数据科学家和机器学习爱好者。 使用场景及目标:适用于需要对数据进行稳健聚类分析的场景,特别是当数据集中可能存在异常点时。目标是通过实际案例和代码实现,帮助读者掌握K-Medoids算法的工作原理及其应用场景。 其他说明:文中提供了详细的代码片段和解释,便于读者动手实践。同时提醒了一些常见的注意事项,如初始medoids的选择和距离矩阵的计算效率等问题。

    基于springboot的学生选课管理系统(源码+数据库)-265

    基于springboot的学生选课管理系统:前端 vue2、elementui,后端 maven、springmvc、spring、mybatis;角色分为管理员、学生、老师;集成课程信息、校园论坛、校园公告、选课等功能于一体的系统。 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Node 14.14.0</b> - <b>JDK 1.8</b>

    基于ssm的物流快递管理系统(源码+数据库)216

    基于ssm的物流快递管理系统:前端 jsp、jquery、easyui,后端 springmvc、spring、mybatis;角色分为管理员、用户;集成在线下单、新闻资讯、订单管理等功能于一体的系统。 ## 功能介绍 ### 网站前台 - 网站首页:主导航栏,轮播图,新闻资讯,服务介绍 - 在线下单:填写发货人和收货人信息,提交订单,按快递单号查询快递明细 - 新闻资讯:资讯信息列表展示,资讯详情 ### 管理后台 - 菜单管理:菜单信息的增删改查 - 角色管理:角色信息的增删改查,编辑权限 - 用户列表:用户信息的增删改查,角色分配 - 新闻管理:新闻信息的增删改查,新闻内容支持富文本编辑 - 留言列表:列表信息的列表查询,信息删除,信息编辑,按姓名和联系方式模糊查询 - 订单管理:订单信息的增删改查,多条件查询,更新订单状态 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    ### 【人工智能应用开发】基于Dify的多场景AI应用开发实战指南:从聊天助手到企业知识库构建

    内容概要:本文档《Dify_实战指南.pdf》介绍了Dify这一多合一的数据处理与分析平台,旨在简化AI应用开发流程。Dify通过提供可视化的界面和模块化设计,支持多种大语言模型,具备私有化部署与数据安全保障,拥有活跃的开发者社区。文档详细阐述了Dify的设计初衷、核心理念、应用场景、主要功能及其开发实战案例,如聊天助手、企业知识库和小红书运营工作流。; 适合人群:具备一定编程基础,对AI应用开发感兴趣的开发者、数据科学家及技术爱好者。; 使用场景及目标:①简化AI应用开发流程,支持多种大语言模型;②提供模块化设计与功能组件,实现快速迭代与创新;③确保数据安全,支持私有化部署;④通过实战案例掌握Dify的实际应用技巧。; 其他说明:文档强调Dify的开源特性、低代码/无代码开发、全面模型支持、功能组件丰富等特点,鼓励开发者利用Dify的工具和社区资源,降低AI应用开发门槛,加速从概念到产品的转化过程。

    基于树莓派的微信机器人.zip

    基于树莓派的微信机器人

    基于ssm+jsp的虚拟商品管理系统(源码+数据库)241

    基于ssm+jsp的虚拟商品管理系统:前端 jsp、jquery,后端 maven、springmvc、spring、mybatis;角色分为管理员、用户;集成促销商品、商品购买、购物车、订单查询等功能于一体的系统。 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    自动驾驶路径跟踪:基于二自由度横摆动力学的MPC控制实现双移线和单移线路径

    内容概要:本文详细介绍了基于二自由度横摆动力学模型的模型预测控制(MPC)在自动驾驶路径跟踪中的应用,特别是针对双移线和单移线路径的跟踪。首先,文章解释了如何自定义期望轨迹并导入轨迹数据,接着讨论了Q矩阵和R矩阵的作用以及如何调整它们以优化侧向位置跟踪和前轮转角曲线的效果。此外,还探讨了输出值边界的约束设置,确保系统的稳定性和可行性。最后,文章提到了模型的仿真效果,并分享了一些实战经验和参数调整技巧,如预测时域的选择和曲率补偿的应用。 适合人群:从事自动驾驶研究的技术人员、对路径跟踪算法感兴趣的工程师和研究人员。 使用场景及目标:适用于自动驾驶汽车的研发过程中,特别是在路径规划和控制模块的设计阶段。目标是提高路径跟踪的精确度和平滑性,确保车辆能够在复杂路况下安全行驶。 其他说明:文中提供了多个代码示例,帮助读者更好地理解和实现MPC控制。同时,推荐观看UP主‘阿Xin自动驾驶’的相关视频,以便直观了解仿真效果。

    基于ssm的校园二手交易平台管理系统(源码+数据库)162

    基于ssm的校园二手交易平台管理系统:前端 jsp、jquery,后端 maven、springmvc、spring、mybatis;角色分为管理员、用户;集成商品浏览、商品详情、在线购买、订单查询等功能于一体的系统。 ## 功能介绍 ### 管理员 - 物品分类管理:分类信息的增删改查,一级分类,二级分类 - 物品管理:用户发布的二手商品信息,后台管理员可以查看,删除商品,上架和下架操作 - 订单管理:用户在线购买商品后,管理员可以查询订单信息,订单删除,订单状态 - 用户管理:用户在前台自行注册的用户账号信息,管理员可以删除、禁用、激活 ### 用户 - 基本功能:登录,注册,退出 - 网站首页:全局搜索,分类导航,商品列表展示 - 商品:商品详情,商品收藏,联系卖家,物品留言,在线购买 - 发布商品:用户可以将自己闲置的二手商品发布到平台上进行售卖 - 我的:用户信息查看与修改,修改头像,密码修改,我收藏的物品,我发布的物品,我的订单 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    工业控制领域200PLC实现两台水泵一用一备自动控制及故障切换

    内容概要:本文详细介绍了基于西门子S7-200 PLC的两台水泵一用一备自动控制系统的设计与实现。主要内容包括:1. 控制要求拆解,如总启动和总停止、一用一备交替工作、故障切换与报警、故障判断逻辑;2. 代码实现,涉及变量定义、总启动与总停止逻辑、电机交替运行逻辑、故障切换与报警逻辑;3. 上位机组态源程序,使用WinCC flexible进行画面设计和运行测试。通过这些内容,构建了一个能够稳定运行、具备故障自恢复能力的水泵控制系统。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉PLC编程和上位机组态的从业者。 使用场景及目标:适用于需要高可靠性和冗余备份的工业水泵控制系统,旨在提高系统的稳定性和安全性,减少设备损耗,延长使用寿命。目标是在工业环境中实现无人值守的自动化控制。 其他说明:文中提供了详细的编程思路和具体代码片段,帮助读者更好地理解和应用。此外,还提到了实际调试中遇到的问题及其解决方案,为实际工程应用提供宝贵的经验。

    燃料电池汽车功率跟随Cruise-Matlab联合仿真模型及其优化策略

    内容概要:本文详细介绍了基于Cruise2019和Matlab2018a构建的燃料电池汽车功率跟随仿真模型。该模型通过多个控制模块确保燃料电池输出功率紧密跟随车辆需求,同时保持电池SOC稳定。具体包括:DCDC控制模块采用动态电压补偿策略,避免电压震荡;再生制动模块在高SOC时增加回收力度,减少机械制动磨损;机械制动与再生制动的无缝切换策略;以及针对燃料堆响应延迟的加速补偿措施。此外,文中还分享了多项调试经验和优化技巧,如变步长求解器的选择、虚拟CAN信号采集点的应用等。 适合人群:从事新能源汽车研究的技术人员、高校相关专业师生、对燃料电池汽车感兴趣的科研工作者。 使用场景及目标:适用于燃料电池汽车的动力系统仿真研究,旨在提高仿真精度,优化控制策略,缩短开发周期。 其他说明:文中提供的代码片段和调试经验对于理解和改进燃料电池汽车的功率跟随性能具有重要参考价值。

    基于ssm+vue的校园购物网站管理系统(源码+数据库)184

    基于ssm+vue的校园购物网站管理系统:前端 vue、elementui,后端 maven、springmvc、spring、mybatis;角色分为管理员、用户;集成商品浏览、购物车、在线结算、订单查询等功能于一体的系统。 ## 功能介绍 ### 用户 - 基本功能:登录,注册,退出 - 网站首页:主导航栏,轮播图,商品搜索,商品信息推荐,商品资讯 - 商品购买:商品列表展示,按商品名称和品牌模糊搜索商品,商品详情,购物车,积分兑换,在线结算 - 其他功能:商品资讯,留言反馈 - 个人中心:个人信息查询与修改,密码修改,我的订单查询,我的地址维护,我的收藏列表,用户充值 ### 管理员 - 用户管理:用户信息的增删改查,用户可以在用户端自行注册 - 商家管理:商家信息的增删改查 - 商品分类管理:分类信息的增删改查 - 商品信息管理:商品信息的增删改查,商品图片上传 - 订单评价管理:订单评价信息的列表查询,删除 - 留言板管理:用户在用户端发布的留言信息,管理员后台查看与回复 - 系统管理:轮播图信息的增删改查,商品资讯的增删改查 - 订单管理:订单的列表查询,发货操作 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>Node 14.14.0</b> - <b>JDK 1.8</b>

Global site tag (gtag.js) - Google Analytics