FLEX 跑马灯

Flex “跑马灯”效果

自定义类(BroadCastMarquee.as):

package marquee
{
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.utils.Timer;
  
    import mx.core.UIComponent;
  
    /**
    *
      * 信息滚动显示(跑马灯控件)
      * @version
    * <pre>
    * 修改版本: 1.0.0
    * 修改日期:2009-1-15
    * 修改说明:形成初始版本
    *</pre>
       *
    * * 功能:
    * 1.直接将某TextField转换为跑马灯文本 changeTextFieldToMarqueeText
    * 2.动态设定显示宽度 width
    * 3.动态设定一次移动间隔时间 delay
    * 4.动态设定一次移动间隔距离 step
    * 5.设定默认文本显示样式 defaultTextFormat
    * 6.动态设定文本显示样式 setTextFormat
    * */
    public class BroadCastMarquee extends UIComponent
      {
       
          [Bindable]
           private var broadcastText:String="broadcast message";
      
           private var m_timer:Timer;
      
           private var m_DefaultText_X:Number=0;
        
           //每次移动距离
        private var m_step:Number=10;
          
           //滚动范围
        private var m_rect:Rectangle;
          
        //移动时间间隔
        private var t_delay:Number=100;
          
        //广播信息滚动宽度
        private var m_Width:Number;
       
        //滚动方向属性
        [Inspectable(defaultValue="left",enumeration="right,left", category="direction", type="String")]
        public var ScrollDirection:String="left";
       
       
           //显示内容样式
           [Bindable]
           private var m_TextFormat:TextFormat=new TextFormat("Verdana","10","#0b333c");
       
       /**广播信息内容显示控件*/
       private var m_BroadCastText:TextField;
      
      // private var m_BroadcastLabel:Label;
       
       public function BroadCastMarquee()
       {
           super();
           
           InitBroadcast();
           
           addEventListener(MouseEvent.MOUSE_OVER,rollOverHandler);
           addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);
           
       }
       
       /**初始化*/
       private function InitBroadcast():void
       {
           /**广播信息显示控件初始化*/
           m_BroadCastText=new TextField();
           m_BroadCastText.autoSize=TextFieldAutoSize.LEFT;
           m_BroadCastText.multiline=false;
           m_BroadCastText.selectable=false;
           m_BroadCastText.x=m_BroadCastText.y=m_DefaultText_X
           m_BroadCastText.wordWrap=false;
           m_BroadCastText.text=broadcastText;
           //m_BroadCastText.defaultTextFormat=m_TextFormat;
           addChild(m_BroadCastText);
           
           
           this.m_Width=this.width;
           m_rect=new Rectangle(0,0,this.width,this.m_BroadCastText.textHeight);
           this.m_BroadCastText.scrollRect=m_rect;
            
              m_timer = new Timer(t_delay);
              
             ScrollBroadText();
              
           
           } 
       
       /**
        * 如果有新的广播消息,或者长度改变进行滚动显示
        * */
           private function ScrollBroadText():void
          {
           if(this.m_timer!=null)
          {
                  //停止移动
               StopMoveBroadcast();
               
               if(this.broadcastText!="")
               {
                   m_timer.addEventListener(TimerEvent.TIMER, timerhandler);
                   m_timer.start();
               }
              // Math.abs(
                 
          }
          }
      
      /**控制滚动信息*/
          private function timerhandler(evt:TimerEvent):void
        {
          if(this.m_BroadCastText.textWidth>0)
          {
              
             if(ScrollDirection.toLowerCase()=="left")
               {
                  
                    if(m_rect.x<=this.m_BroadCastText.textWidth)
                     {
                      //  this.m_BroadCastText.x+=(-this.m_step);
                       m_rect.x+=this.m_step;
                        
                     }else
                     {
                        //this.m_BroadCastText.x=m_DefaultText_X+this.m_BroadCastText.textWidth;
                        m_rect.x=-(m_DefaultText_X+this.m_Width);
                     }
                     
  
              }else
              {
                
                 if(Math.abs(m_rect.x)<=this.m_BroadCastText.textWidth)
                 {
                     m_rect.x-=this.m_step;
                    
                 }else
                 {
                    this.m_rect.x=m_DefaultText_X;
                   
                 }
                
            }
           
           m_BroadCastText.scrollRect = m_rect;  
           
         }else
         {
             //停止移动
             StopMoveBroadcast();
          }
         
         
            
            }
        
        /**停止移动*/
             private function StopMoveBroadcast():void
            {
                 if(m_timer!=null)
          {
            this.m_timer.stop();
             if(m_timer.hasEventListener(TimerEvent.TIMER))
                 m_timer.removeEventListener(TimerEvent.TIMER, timerhandler);
              
               m_BroadCastText.x=this.m_DefaultText_X;
               m_rect.height = m_BroadCastText.height;
               // this.height=m_rect.height;
               m_BroadCastText.scrollRect = m_rect;
           }
        }
     
     
     /**************************广播信息处理事件*********************************/
     
     /**鼠标经过处理事件*/
         protected function rollOverHandler(event:MouseEvent):void
        {
             if(this.m_timer!=null&&this.broadcastText!="")
             {
                 this.m_timer.stop();
             }
        }
        
        /**鼠标离开处理事件*/
        protected function rollOutHandler(event:MouseEvent):void
        {
          if(this.m_timer!=null&&this.broadcastText!="")
             {
                 this.m_timer.start();
             }
        }
        
     
      /**************************广播信息属性*************************************/
     
     /**移动时间间隔*/
         public function set BroadCastDeplay(value:Number):void
          {
             this.m_timer.delay=value;         
          }
     
     /**设置广播信息内容*/
          public function set BroadCastText(value:String):void
         {
             this.m_BroadCastText.text=value;
             ScrollBroadText();
         }
     
     /**取得广播信息内容*/
         public function get BroadCastText():String
         {
             return this.broadcastText;
         }
     
     
     /**广播信息宽度宽度*/
         public override function get width():Number
         {
             return this.m_Width;
         }
     
        public override function set width(width:Number):void
        {
              this.m_Width=width;
             this.m_rect.width=this.m_Width;
            this.m_BroadCastText.scrollRect=this.m_rect;
            ScrollBroadText();
          //  this.m_BroadCastText.setTextFormat
        }
     
     
         /**设置滚动方向('left' or 'right')*/
         public function set Direction(value:String):void
          {
              this.ScrollDirection=value;
             ScrollBroadText();
         }
     
     
         /**设置字体格式化样式*/
         public function set defaultTextFormat(format:TextFormat):void
         {
             this.m_BroadCastText.defaultTextFormat=format;
             this.setTextFormat(format);
         //
         }
     
         public function setTextFormat(format:TextFormat, beginIndex:int = -1, endIndex:int = -1):void
        {
            m_BroadCastText.setTextFormat(format, beginIndex, endIndex);
            ScrollBroadText();
        }
     
      
         /**字体大小*/
         public function set fontSize(value:Object):void
         {
             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,value,this.m_TextFormat.color);
             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
          
         }
     
         /**字体名称*/
         public function set fontFamily(value:String):void
         {
             this.m_TextFormat=new TextFormat(value,this.m_TextFormat.size,this.m_TextFormat.color);
            this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
         }
     
         /**字体颜色*/
         public function set color(value:Object):void
         {
             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,value);
             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
         }
     
         /**是否是粗体*/
         public function set fontWeight(value:Object):void
         {
             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.size,this.m_TextFormat.color,value)
             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1,-1);
         }
    } 
}



TestBroadCastMarquee.mxml :

  <?xml version="1.0" encoding="utf-8"?> 
  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  layout="absolute" creationComplete="init()" xmlns:marquee="marquee.*"> 
       <marquee:BroadCastMarquee width="500" height="25" BroadCastDeplay="800" BroadCastText="公告:火爆商品等你拿!" ScrollDirection="left">        
       </marquee:BroadCastMarquee>    
   </mx:Application> 

你可能感兴趣的:(Flex,Flash)