⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playablegroup.as

📁 jquery插件
💻 AS
📖 第 1 页 / 共 2 页
字号:
/** * Copyright (c) 2007 Moses Gunesch *  * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */package org.goasap.utils {	import flash.utils.Dictionary;		import org.goasap.PlayableBase;	import org.goasap.events.GoEvent;	import org.goasap.interfaces.IPlayable;	import org.goasap.managers.Repeater;		/**	 * Dispatched when the group starts.	 * @eventType org.goasap.events.START	 */	[Event(name="START", type="org.goasap.events.GoEvent")]	/**	 * Dispatched when the group is paused successfully.	 * @eventType org.goasap.events.PAUSE	 */	[Event(name="PAUSE", type="org.goasap.events.GoEvent")]	/**	 * Dispatched when the group is resumed successfully.	 * @eventType org.goasap.events.RESUME	 */	[Event(name="RESUME", type="org.goasap.events.GoEvent")]	/**	 * Dispatched at the end the group if <code>repeater.cycles</code> is set to	 * a value other than one, just before the group starts its next play cycle.	 * @eventType org.goasap.events.CYCLE	 */	[Event(name="CYCLE", type="org.goasap.events.GoEvent")]	/**	 * Dispatched if the group is manually stopped.	 * @eventType org.goasap.events.STOP	 */	[Event(name="STOP", type="org.goasap.events.GoEvent")]	/**	 * Dispatched after all children have dispatched a STOP or COMPLETE event.	 * @eventType org.goasap.events.COMPLETE	 */	[Event(name="COMPLETE", type="org.goasap.events.GoEvent")]	/**	 * Batch-play a set of items and receive an event when all of them have finished.	 * 	 * <p>PlayableGroup accepts any IPlayable for its children, which can include	 * tweens, other groups, sequences and so forth. The group listens for both 	 * GoEvent.STOP and GoEvent.COMPLETE events from its children, either of which 	 * are counted toward group completion.</p>	 * 	 * <p>The <code>repeater</code> property of PlayableGroup allows you to loop play 	 * any number of times, or indefinitely by setting its cycles to Repeater.INFINITE. 	 * GoEvent.CYCLE is dispatched on each loop and GoEvent.COMPLETE when finished.	 * Other events dispatched include the GoEvent types START, STOP, PAUSE, and RESUME.</p>	 * 	 * @author Moses Gunesch	 */	public class PlayableGroup extends PlayableBase implements IPlayable {				// -== Public Properties ==-				/**		 * Get or set the children array. Only IPlayable items are stored. Note that 		 * unlike the methods <code>addChild</code> and <code>removeChild</code>, 		 * setting this property will stop any group play currently in progress.		 */		public function get children():Array {			var a:Array = [];			for (var item:Object in _children)				a.push(item);			return a;		}		public function set children(a:Array):void {			if (_listeners > 0)				stop();			for each (var item:Object in a)				if (item is IPlayable)					addChild(item as IPlayable);		}				/**		 * The groups's Repeater instance, which may be used to make		 * it loop and play more than one time.		 * 		 * <p>The Repeater's cycles property can be set to an integer, or		 * to Repeater.INFINITE or 0 to repeat indefinitely.</p> 		 * 		 * <pre>		 * var group:PlayableGroup = new PlayableGroup(tween1, tween2, tween3);		 * group.repeater.cycles = 2;		 * group.start();		 * trace(group.repeater.currentCycle); // output: 0		 * </pre>		 */		public function get repeater(): Repeater {			return _repeater;		}				/**		 * Determines the number of children currently being monitored 		 * for completion by the group.		 */		public function get listenerCount() : uint {			return _listeners;		}		// -== Protected Properties ==-				/** @private */		protected var _children: Dictionary = new Dictionary();				/** @private */		protected var _listeners: uint = 0;				/** @private */		protected var _repeater: Repeater;				// -== Public Methods ==-				/**		 * Constructor.		 * 		 * @param items	Any number of IPlayable items as separate arguments, 		 * 					or a single array of them.		 */		public function PlayableGroup(...items) {			super();			if (items.length > 0)				this.children = ((items[ 0 ] is Array) ? items[ 0 ] : items);			_repeater = new Repeater();			_repeater.setParent(this);		}				/**		 * Searches for a child with the specified playableID.		 * 		 * @param playableID	The item playableID to search for.		 * @param deepSearch	If child is not found in the group, this option runs a 		 * 						recursive search on any children that are PlayableGroup.		 * @return				The SequenceStep with the matching playableID.		 */		public function getChildByID(playableID:*, deepSearch:Boolean=true):IPlayable {			for (var item:Object in _children)				if ((item as IPlayable).playableID===playableID)					return (item as IPlayable);			if (deepSearch) {				for (item in _children) {					if (item is PlayableGroup) {						var match:IPlayable = ((item as PlayableGroup).getChildByID(playableID, true));						if (match) { return (match as IPlayable); }					}				}			}			return null;		}				/**		 * Adds a single IPlayable to the children array (duplicates are rejected) and		 * syncs up the group and child play-states based on various conditions.		 * 		 * <p>If both the group and the item being added are STOPPED, the item is simply		 * added to the children list.</p>		 * 		 * <p>If both items are PAUSED or PLAYING (including PLAYING_DELAY for children), 		 * the child is actively added to the group during play and will be monitored for 		 * completion along with others.</p>		 * 		 * <p>In other cases where the child's state mismatches the group's state, there		 * are several behaviors available. Normally if the second parameter <code>adoptChildState</code>		 * is left false, the child's mismatched state will be updated to match the group's		 * state. This can result in it being stopped, paused, or started/resumed and monitored 		 * for completion along with other children. Passing true for <code>adoptChildState</code> 		 * results in updating the group's state to match the child's. This option could be used, for 		 * example, if you wanted to build a group of already-playing items without disrupting their		 * play cycle with a start() call to the group.</p>		 * 		 * @param item				Any instance that implements IPlayable and uses PlayableBase's play-state constants.		 * @param adoptChildState	Makes this group change its play-state to match the state of the new child.		 * @return Success.		 */		public function addChild(item:IPlayable, adoptChildState:Boolean=false): Boolean {			if (_children[ item ])				return false;			if (item.state!=_state) { // Resolve an obvious mismatched play state...									  // Normally states are both STOPPED, so the following ugliness is rarely used.				var primary:IPlayable = (adoptChildState ? item : this);				var primaryPlaying:Boolean = (primary.state==PLAYING || primary.state==PLAYING_DELAY);				var secondary:IPlayable = (adoptChildState ? this : item);				var secondaryPlaying:Boolean = (secondary.state==PLAYING || secondary.state==PLAYING_DELAY);				if ( !(primaryPlaying && secondaryPlaying) ) // Less obvious, but treat PLAYING_DELAY & PLAYING as "playing."				{					switch (primary.state) {						case STOPPED:							secondary.stop();							break;						case PAUSED: // This case works either way. Both START & PAUSE events will result.							if (secondary.state==STOPPED)								secondary.start();							secondary.pause();							break;						case PLAYING: 						case PLAYING_DELAY:							if (secondary.state==PAUSED)								secondary.resume();							else if (secondary.state==STOPPED) {								if (adoptChildState) {									_state = PLAYING; // Group adopts child playing state									dispatchEvent(new GoEvent( GoEvent.START));								} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -