package { import cn.com.aven.*; import flash.display.MovieClip; import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.MouseEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.display.Sprite; import flash.display.Loader; import flash.net.navigateToURL; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.utils.Timer; import flash.events.TimerEvent; /** * Smallest Banner Version 2.0 * * @author activetofocus team * @since 2010-01-02 */ public class BannerRotatorMain extends MovieClip { //-------------------------------------- // Variables //-------------------------------------- /** * xml file */ private var _xml:XML; /** * style data */ private var _sw:Number;// set stage width private var _sh:Number;// set stage height private var _sr:Number;// set stage radion private var _infosw:Number;//set information width; private var _spacing:Number;// set number button spacing value private var _effect:Number;// set transtion effect private var _delay:Number;// set delay time private var _auto:Boolean;// set auto boolean private var _infoshow:Boolean;// set info show value private var _infoalpha:Number;// set info alpha private var _pgcolor:uint;// set progress color /** * item data */ private var _itemArr:Array;// all items array private var _itemLength:Number;// items length private var _nowInt:int = 0;// now selete item /** * button data */ private var _autoBut:McStop;// auto button private var _numArr:Array;// all number button array private var _infoArr:Array;// all info Array /** * other information */ private var _timer:Timer; private var _autoPanel:Sprite; /** * constructor */ public function BannerRotatorMain() { this.addEventListener(Event.ADDED_TO_STAGE, onAddToStage); } //-------------------------------------- // Function //-------------------------------------- /** * start loader xml file */ public function init():void { var config:String = ""; if(this.stage.loaderInfo.parameters.xmlUrl) { config = this.stage.loaderInfo.parameters.xmlUrl; } else { config = "xml/data.xml"; } var loader : URLLoader = new URLLoader(); loader.addEventListener(IOErrorEvent.IO_ERROR,onLoaderErrorEvent); loader.addEventListener(Event.COMPLETE,onLoaderCompleteEvent); loader.load(new URLRequest(config)); } /** * analyze xml files */ private function analyzeXml():void { // style _sw = Number(_xml.style.width) || 590; _sh = Number(_xml.style.height) || 300; _infosw = Number(_xml.style.infowidth) || 200; _sr = Number(_xml.style.radion); _spacing = Number(_xml.style.spacing) || 5; _effect = Number(_xml.style.effect) || 1; _delay = Number(_xml.style.delay) || 2000; _auto = (_xml.style.auto && _xml.style.auto == "true") ? true : false; _infoshow = (_xml.style.infoshow && _xml.style.infoshow == "true") ? true : false; _infoalpha = Number(_xml.style.infoalpha) || 0.4; _pgcolor = _xml.style.pgcolor; // item data _itemLength = Number(_xml.items.item.length()); _itemArr = []; for(var i:int = 0;i<_itemLength;i++) { var obj:Object = {}; obj.title = _xml.items.item[i].@title || ""; obj.src = _xml.items.item[i].@src || ""; obj.link = _xml.items.item[i].@link || ""; obj.desc = _xml.items.item[i] || ""; obj.tg = _xml.items.item[i].@target || "_blank"; _itemArr.push(obj); } // add all item addAllItem(); // add number addNumber(); // add auto panel if(_auto) addAutoPlay(); // add mask var sp:Sprite = new Sprite(); sp.graphics.beginFill(0xffffff,1); sp.graphics.drawRoundRect(0,0,_sw,_sh,_sr,_sr); sp.graphics.endFill(); addChild(sp); mask = sp; } /** * add all item */ private function addAllItem():void { for(var i:int =0;i<_itemLength;i++) { var mc:Sprite = new Sprite(); mc.name = i.toString(); _itemArr[i].mc = mc; // add loader var lo:Preloader = new Preloader(); _itemArr[i].lo = lo; lo.x = _sw/2; lo.y = _sh/2; lo.scaleX = 0.6; lo.scaleY = 0.6; mc.addChild(lo); // add item var loader:Loader = new Loader(); loader.name = i.toString(); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onLoaderItemError); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderItemComplete); loader.load(new URLRequest(_itemArr[i].src)); // set mc mc.x = _sw * i; mc.y = 0; mc.buttonMode = true; mc.mouseChildren = false; mc.addEventListener(MouseEvent.CLICK,onItemMouseClick); addChild(mc); } } /** * add number button */ private function addNumber():void { _numArr = []; _infoArr = []; var sp:Sprite = new Sprite(); var mi:Sprite = new Sprite(); mi.graphics.beginFill(0x000000,1); mi.graphics.drawRect(0,0,_infosw,_sh); mi.graphics.endFill(); mi.alpha = _infoshow ? _infoalpha : 0; sp.addChild(mi); // add number button for(var i:int =0;i<_itemLength;i++) { var num:McBtn = new McBtn(); num.name = i.toString(); num.addEventListener(MouseEvent.MOUSE_OVER,onNumMouseOver); num.addEventListener(MouseEvent.MOUSE_OUT,onNumMouseOut); num.addEventListener(MouseEvent.CLICK,onNumMouseClick); num.mouseChildren = false; num.buttonMode = true; num.x = _infosw - (_itemLength - i)*(num.width + _spacing) - 20; num.y = _sh - 15; sp.addChild(num); _numArr.push(num); } // add auto play button if(_auto) { _autoBut = new McStop(); _autoBut.buttonMode = true; _autoBut.addEventListener(MouseEvent.CLICK,onAutoButClickEvent); _autoBut.gotoAndStop(2); _autoBut.x = _infosw - 15; _autoBut.y = _sh - 15; sp.addChild(_autoBut); } // add infomation textfield if(_infoshow) { for(var j:int =0;j<_itemLength;j++) { var te:TextField = new TextField(); te.visible = false; te.width = _infosw - 10; te.multiline = true; te.wordWrap = true; te.autoSize = TextFieldAutoSize.LEFT; te.htmlText = _itemArr[j].desc; te.x = 5; te.y = 5; te.selectable = false; _infoArr.push(te); sp.addChild(te); } } _numArr[_nowInt].gotoAndStop(_numArr[_nowInt].currentFrame + 2); if(_infoshow) _infoArr[_nowInt].visible = true; sp.x = _sw - _infosw; // add mask var ma:Sprite = new Sprite(); ma.graphics.beginFill(0xffffff,1); ma.graphics.drawRect(0,0,_sw,_sh); ma.graphics.endFill(); sp.addChild(ma); sp.mask = ma; addChild(sp); } /** * add autoplay panel */ private function addAutoPlay():void { _autoPanel = new Sprite(); _autoPanel.graphics.beginFill(_pgcolor,.4); _autoPanel.graphics.drawRect(0,0,1,2); _autoPanel.graphics.endFill(); _autoPanel.width = 0; addChild(_autoPanel); timerStart(); } /** * start timer */ private function timerStart():void { _timer = new Timer(50,_delay/50); _timer.addEventListener(TimerEvent.TIMER,onTimerEvent); _timer.addEventListener(TimerEvent.TIMER_COMPLETE,onTimerCompleteEvent); _timer.start(); } /** * stop timer */ private function timerStop():void { _autoPanel.width = 0; _timer.stop(); _timer.removeEventListener(TimerEvent.TIMER,onTimerEvent); _timer.removeEventListener(TimerEvent.TIMER_COMPLETE,onTimerCompleteEvent); } /** * guider image change */ private function GuiderImage(i:int,j:int,bool:Boolean):void { removeAllImage(); _itemArr[i].mc.visible = _itemArr[j].mc.visible = true; if(_effect == 1) { if(bool) { _itemArr[i].mc.x = 0; _itemArr[j].mc.x = -_sw; Guider.to(_itemArr[i].mc,{tween:{x:_sw},blur:{blurXFrom:50,blurXTo:0}},600); } else { _itemArr[j].mc.x = _sw; Guider.to(_itemArr[i].mc,{tween:{x:-_sw},blur:{blurXFrom:50,blurXTo:0}},600); } Guider.to(_itemArr[j].mc,{tween:{x:0},blur:{blurXFrom:50,blurXTo:0}},600); } else { _itemArr[j].mc.alpha = 0; _itemArr[i].mc.x = 0; _itemArr[j].mc.x = 0; Guider.to(_itemArr[i].mc,{tween:{alpha:0}},600); Guider.to(_itemArr[j].mc,{tween:{alpha:1}},600); } if(_infoshow) { removeAllInfo(); _infoArr[j].visible = true; //var k1:Number = (28 - _infoArr[j].textHeight)/2; // var k2:Number = k1 * 3 + 15; // var k3:Number = k1 * 3; // _infoArr[j].y = k3; // Guider.to(_infoArr[i],{tween:{y: k2}},600); // Guider.to(_infoArr[j],{tween:{y:k1}},600); } if(_auto) { _autoBut.gotoAndStop(2); timerStart(); } } /** * set all item visible value */ private function removeAllImage():void { for(var i :int = 0;i<_itemArr.length;i++) { _itemArr[i].mc.visible = false; } } /** * set all info textfield visible value */ private function removeAllInfo():void { for(var i :int = 0;i<_infoArr.length;i++) { _infoArr[i].visible = false; } } //-------------------------------------- // Event //-------------------------------------- /** * add to stage */ private function onAddToStage(evt:Event):void { this.removeEventListener(Event.ADDED_TO_STAGE, onAddToStage); init(); } /** * loader xml file error */ private function onLoaderErrorEvent(evt:IOErrorEvent):void { evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoaderErrorEvent); evt.currentTarget.removeEventListener(Event.COMPLETE,onLoaderCompleteEvent); trace("read xml error"); } /** * loader xml file complete */ private function onLoaderCompleteEvent(evt:Event):void { evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoaderErrorEvent); evt.currentTarget.removeEventListener(Event.COMPLETE,onLoaderCompleteEvent); _xml = new XML(evt.currentTarget.data); //Analyze xml data analyzeXml(); } /** * loader item error */ private function onLoaderItemError(evt:IOErrorEvent):void { evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoaderItemError); evt.currentTarget.removeEventListener(Event.COMPLETE,onLoaderItemComplete); } /** * loader item complete */ private function onLoaderItemComplete(evt:Event):void { evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoaderItemError); evt.currentTarget.removeEventListener(Event.COMPLETE,onLoaderItemComplete); var lo:Loader = evt.currentTarget.loader; try{ _itemArr[int(evt.currentTarget.loader.name)].mc.removeChild(_itemArr[int(evt.currentTarget.loader.name)].lo); }catch(err:Error){}; _itemArr[int(evt.currentTarget.loader.name)].mc.addChild(lo); } /** * number mouse over event */ private function onNumMouseOver(evt:MouseEvent):void { if(int(evt.currentTarget.name) == _nowInt) return; evt.currentTarget.gotoAndStop(2); } /** * number mouse out event */ private function onNumMouseOut(evt:MouseEvent):void { if(int(evt.currentTarget.name) == _nowInt) return; evt.currentTarget.gotoAndStop(1); } /** * number mouse click event */ private function onNumMouseClick(evt:*):void { if(int(evt.currentTarget.name) == _nowInt) return; if(_auto) timerStop(); var i:int = _nowInt; var j:int = int(evt.currentTarget.name); var bool:Boolean; if(i == j) return; _numArr[i].gotoAndStop(evt.currentTarget.currentFrame - 2); evt.currentTarget.gotoAndStop(3); if(i > j) bool = true; _nowInt = j; GuiderImage(i,j,bool); } /** * auto timer event */ private function onTimerEvent(evt:TimerEvent):void { _autoPanel.width = _sw*(evt.currentTarget.currentCount/(_delay/50)); } /** * auto play timer complete */ private function onTimerCompleteEvent(evt:TimerEvent):void { var k:int = (_nowInt + 1) == _itemLength ? 0 : _nowInt + 1; onNumMouseClick({currentTarget:_numArr[k]}) } /** * item mouse click event */ private function onItemMouseClick(evt:MouseEvent):void { if(_itemArr[_nowInt].link != "") navigateToURL(new URLRequest(_itemArr[_nowInt].link),_itemArr[_nowInt].tg); } /** * auto button mouse click event */ private function onAutoButClickEvent(evt:MouseEvent):void { if(evt.currentTarget.currentFrame == 1) { _timer.start(); evt.currentTarget.gotoAndStop(2); } else { _timer.stop(); evt.currentTarget.gotoAndStop(1); } } } }