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;
                }
            }
        }
    }
}