思路比较简单,准备一个主文本的副本用于辅助滚动,当主文本滚动出界时辅助文本开始滚动。
不废话,上代码。
1 <?xml version="1.0" encoding="utf-8"?> 2 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 3 xmlns:s="library://ns.adobe.com/flex/spark" 4 xmlns:mx="library://ns.adobe.com/flex/mx" 5 frameRate="60" 6 applicationComplete="applicationCompleteHandler(event)"> 7 8 <fx:Style> 9 @namespace s "library://ns.adobe.com/flex/spark"; 10 @namespace mx "library://ns.adobe.com/flex/mx"; 11 s|Label 12 { 13 fontFamily:'Microsoft Yahei'; 14 fontSize:12; 15 } 16 </fx:Style> 17 18 <fx:Script> 19 <![CDATA[ 20 import mx.events.EffectEvent; 21 import mx.events.FlexEvent; 22 23 import spark.effects.easing.Linear; 24 25 private var fromX:Number 26 private var spew:Number; 27 private var duration:Number = 30000; 28 29 protected function applicationCompleteHandler(event:FlexEvent):void 30 { 31 masker.graphics.beginFill(0,1); 32 masker.graphics.drawRect(-textContainer.width/2,-textContainer.height/2,textContainer.width,textContainer.height); 33 masker.graphics.endFill(); 34 textContainer.mask = masker; 35 36 spew = textContainer.width - textGroup.width; 37 38 fromX = -textGroup2.width; 39 textGroup.x = fromX; 40 textGroup2.x = fromX; 41 42 moveEff.duration = duration; 43 moveEff.xTo = textContainer.width; 44 moveEff.play(); 45 } 46 47 protected function moveEff_effectUpdateHandler(event:EffectEvent):void 48 { 49 if(textGroup.x >= spew) 50 { 51 if(!moveEff2.isPlaying) 52 { 53 moveEff2.duration = duration; 54 moveEff2.xTo = textContainer.width; 55 moveEff2.play(); 56 } 57 } 58 } 59 60 protected function moveEff_effectEndHandler(event:EffectEvent):void 61 { 62 textGroup.x = fromX; 63 } 64 65 protected function moveEff2_effectUpdateHandler(event:EffectEvent):void 66 { 67 if(textGroup2.x >= spew) 68 { 69 if(!moveEff.isPlaying) 70 { 71 moveEff.duration = duration; 72 moveEff.xTo = textContainer.width; 73 moveEff.play(); 74 } 75 } 76 } 77 78 protected function moveEff2_effectEndHandler(event:EffectEvent):void 79 { 80 textGroup2.x = fromX; 81 } 82 83 ]]> 84 </fx:Script> 85 <fx:Declarations> 86 <s:Move id="moveEff" target="{textGroup}" easer="{new Linear(0,0)}" 87 effectUpdate="moveEff_effectUpdateHandler(event)" 88 effectEnd="moveEff_effectEndHandler(event)"/> 89 <s:Move id="moveEff2" target="{textGroup2}" easer="{new Linear(0,0)}" 90 effectUpdate="moveEff2_effectUpdateHandler(event)" 91 effectEnd="moveEff2_effectEndHandler(event)"/> 92 </fx:Declarations> 93 <s:SpriteVisualElement id="masker" verticalCenter="0" horizontalCenter="0" mouseEnabled="false"/> 94 <s:BorderContainer width="600" height="480" verticalCenter="0" horizontalCenter="0"> 95 <s:Group id="textContainer" width="100%" height="100%" left="3" top="3" bottom="3" right="3"> 96 97 <s:HGroup id="textGroup2" 98 mouseOver="moveEff2.pause();moveEff.pause()" 99 mouseOut="moveEff2.resume();moveEff.resume()"> 100 <s:Button label="我在滚动吗"/> 101 <s:Button label="文本循环滚动"/> 102 <s:Button label="文本滚动"/> 103 <s:Button label="头尾相连的滚动"/> 104 <s:Button label="你说我是不是在滚动"/> 105 </s:HGroup> 106 107 <s:HGroup id="textGroup" 108 mouseOver="moveEff.pause();moveEff2.pause()" 109 mouseOut="moveEff.resume();moveEff2.resume()"> 110 <s:Button label="我在滚动吗"/> 111 <s:Button label="文本循环滚动"/> 112 <s:Button label="文本滚动"/> 113 <s:Button label="头尾相连的滚动"/> 114 <s:Button label="你说我是不是在滚动"/> 115 </s:HGroup> 116 117 </s:Group> 118 </s:BorderContainer> 119 </s:Application>
效果图: