flex4 跑马灯效果 [源码]

 

自定义类(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
    * 修改人 : zhang
    * 修改说明:形成初始版本
    *</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,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); 
         } 
      
         /**字体颜色*/ 
         public function set color(value:Object):void 
         { 
             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,value); 
             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-1); 
         } 
      
         /**是否是粗体*/ 
         public function set fontWeight(value:Object):void 
         { 
             this.m_TextFormat=new TextFormat(this.m_TextFormat.font,this.m_TextFormat.color,value) 
             this.m_BroadCastText.setTextFormat(this.m_TextFormat,-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> 

 

本文转自 http://blog.csdn.net/xuhuanchao/article/details/4939542

相关文章

一:display:flex布局display:flex是一种布局方式。它即可以...
1. flex设置元素垂直居中对齐在之前的一篇文章中记载过如何...
移动端开发知识点pc端软件和移动端apppc端软件是什么,有哪些...
最近挺忙的,准备考试,还有其他的事,没时间研究东西,快周...
display:flex;把容器设置为弹性盒模型(设置为弹性盒模型之后...
我在网页上运行了一个Flex应用程序,我想使用Command←组合键...