AS3。某些时候,我们需要用到固定长度的文本。如果文本过长,会截取多余的部分。有的还在截取多余的部分后,用“……”追加。那么就总结了下。
code如下:
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.TimerEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.utils.Timer; /** * * @author vini123 * 显示固定长度的文本 */ [SWF(width ="640" , height="360" , frameRate="30")] public class VeryText extends Sprite { private var timer:Timer; private var strList:Array; private var rawText:String; private var textField:TextField; private var _fixWidth:int; public function VeryText() { mouseChildren = false; mouseEnabled = false; addEventListener(Event.ADDED_TO_STAGE , addToStageHandler); } private function addToStageHandler(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE , addToStageHandler); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; initialize(); } private function initialize():void { strList = ["用我三生烟火,换你一世迷离。" , "忽然之间。车如流水马如龙,花月正春风。" , "仿佛有痛楚。如果我晕眩, 那是因为幻觉丰盛。" , "侬今葬花人笑痴,他日葬侬知是谁。" , "杨柳岸晓风残月,执手相看泪眼,竟无语凝噎。" , "等心上人,等了前世 ,等了今生,值得吗!" , "海上生明月,天涯共此时。" , "这世界我来了!"]; textField = new TextField(); textField.autoSize = TextFieldAutoSize.CENTER; textField.defaultTextFormat = new TextFormat("微软雅黑" , 22 , int(0xffffff * Math.random()) , true); addChild(textField); fixWidth = 380; text = strList[Math.floor(strList.length * Math.random())]; stage.addEventListener(Event.RESIZE , resizeHandler); stage.dispatchEvent(new Event(Event.RESIZE)); timer = new Timer(5 * 1000); timer.addEventListener(TimerEvent.TIMER , timerHandler); timer.start(); } private function resizeHandler(e:Event):void { var textWidth:int = _fixWidth != 0 ? _fixWidth : textField.textWidth; textField.x = stage.stageWidth * 0.5 - textWidth * 0.5; textField.y = stage.stageHeight * 0.5 - textField.textHeight * 0.5; } private function timerHandler(e:TimerEvent):void { var str:String = strList[Math.floor(strList.length * Math.random())]; text = str; } /** * * @param value * 设置固定长度 */ public function set fixWidth(value:int):void { if(_fixWidth != value) { _fixWidth = value; if(rawText) text = rawText; } } /** * * @param value * 内容 */ public function set text(value:String):void { rawText = value; if(_fixWidth == 0) { textField.text = value; } else { updateTxt(value); } textField.textColor = int(0xffffff * Math.random()); } /** * * @param value * @param endIndex * @param replaceCode * */ public function updateTxt(value:String , endIndex:int = 0 , replaceCode:String = "……"):void { if(endIndex == 0) { endIndex = value.length; } textField.text = ""; for (var i:int = 0; i < endIndex ; i++) { textField.appendText(value.charAt(i)); if(textField.textWidth > _fixWidth || (i == endIndex -1 && endIndex < value.length)) { textField.appendText(replaceCode); if(textField.textWidth > _fixWidth) { updateTxt(value , i); break; } break; } } } } }