sliderthumb.as

来自「flex的一些小例子」· AS 代码 · 共 370 行

AS
370
字号
////////////////////////////////////////////////////////////////////////////////////  Copyright (C) 2003-2006 Adobe Macromedia Software LLC and its licensors.//  All Rights Reserved. The following is Source Code and is subject to all//  restrictions on such code as contained in the End User License Agreement//  accompanying this product.//////////////////////////////////////////////////////////////////////////////////package flexlib.controls.sliderClasses{	import flash.events.KeyboardEvent;	import flash.events.MouseEvent;	import flash.geom.Point;	import flash.ui.Keyboard;	import mx.controls.Button;	import mx.controls.ButtonPhase;	import mx.core.mx_internal;	import mx.events.SliderEvent;	import mx.controls.sliderClasses.SliderDirection;	import flexlib.baseClasses.SliderBase;		use namespace mx_internal;		[ExcludeClass]		/**	 *  The SliderThumb class represents a thumb of a Slider control.	 *  The SliderThumb class can only be used within the context	 *  of a Slider control.	 *  You can create a subclass of the SliderThumb class,	 *  and use it with a Slider control by setting the <code>thumbClass</code>	 *  property of the Slider control to your subclass. 	 *  			 *  @see mx.controls.HSlider	 *  @see mx.controls.VSlider	 *  @see mx.controls.sliderClasses.Slider	 *  @see mx.controls.sliderClasses.SliderDataTip	 *  @see mx.controls.sliderClasses.SliderLabel	 */	public class SliderThumb extends Button	{		//include "../../core/Version.as";				//--------------------------------------------------------------------------		//		//  Constructor		//		//--------------------------------------------------------------------------			/**		 *  Constructor.		 */		public function SliderThumb()		{			super();				stickyHighlighting = true;		}				//--------------------------------------------------------------------------		//		//  Variables		//		//--------------------------------------------------------------------------			/** 		 *  @private		 *  The zero-based index number of this thumb. 		 */		mx_internal var thumbIndex:int;			/**		 *  @private		 *  x-position offset.		 */		private var xOffset:Number;				//--------------------------------------------------------------------------		//		//  Overridden properties		//		//--------------------------------------------------------------------------			//----------------------------------		//  x		//----------------------------------			/**		 *  @private		 *  Handle changes to the x-position value of the thumb.		 */		override public function set x(value:Number):void		{			var result:Number = moveXPos(value);						updateValue();						super.x = result;		}				//--------------------------------------------------------------------------		//		//  Properties		//		//--------------------------------------------------------------------------			//----------------------------------		//  xPosition		//----------------------------------			/**		 *  Specifies the position of the center of the thumb on the x-axis.		 */		public function get xPosition():Number		{			return $x + width / 2;		}				/**		 *  @private		 */		public function set xPosition(value:Number):void		{			$x = value - width / 2;						SliderBase(owner).drawTrackHighlight();		}				//--------------------------------------------------------------------------		//		//  Overridden methods: UIComponent		//		//--------------------------------------------------------------------------				/**		 *  @private		 */		override protected function measure():void		{			super.measure();				measuredWidth = 12;			measuredHeight = 12;		}				/**		 *  @private		 */		override public function drawFocus(isFocused:Boolean):void		{			phase =  isFocused ? ButtonPhase.DOWN : ButtonPhase.UP;		}				//--------------------------------------------------------------------------		//		//  Overridden methods: Button		//		//--------------------------------------------------------------------------			/**		 *  @private		 */		override mx_internal function buttonReleased():void		{			super.buttonReleased();						if (enabled)			{				systemManager.removeEventListener(					MouseEvent.MOUSE_MOVE, mouseMoveHandler, true);					// in case we go offscreen				stage.removeEventListener(MouseEvent.MOUSE_MOVE, 								stage_mouseMoveHandler);											SliderBase(owner).onThumbRelease(this);			}		}			//--------------------------------------------------------------------------		//		//  Methods		//		//--------------------------------------------------------------------------			/**		 *  @private		 *  Move the thumb into the correct position.		 */		private function moveXPos(value:Number, 	                              overrideSnap:Boolean = false, 	                              noUpdate:Boolean = false):Number		{			var result:Number = calculateXPos(value, overrideSnap);						xPosition = result;						if (!noUpdate) 				updateValue();						return result;		}				/**		 *  @private		 *  Ask the Slider if we should be moving into a snap position 		 *  and make sure we haven't exceeded the min or max position		 */		private function calculateXPos(value:Number,									   overrideSnap:Boolean = false):Number		{			var bounds:Object = SliderBase(owner).getXBounds(thumbIndex);						var result:Number = Math.min(Math.max(value, bounds.min), bounds.max);				if (!overrideSnap)				result = SliderBase(owner).getSnapValue(result, this);							return result;		}				/**		 *	@private		 *	Used by the Slider for animating the sliding of the thumb.		 */		mx_internal function onTweenUpdate(value:Number):void		{			moveXPos(value, true, true);		}				/**		 *	@private		 *	Used by the Slider for animating the sliding of the thumb.		 */		mx_internal function onTweenEnd(value:Number):void		{			moveXPos(value);		}				/**		 *  @private		 *  Tells the Slider to update its value for the thumb based on the thumb's		 *  current position		 */		private function updateValue():void		{			SliderBase(owner).updateThumbValue(thumbIndex);		}			//--------------------------------------------------------------------------		//		//  Overridden event handlers: UIComponent		//		//--------------------------------------------------------------------------			/**		 *  @private		 *  Handle key presses when focus is on the thumb.		 */		override protected function keyDownHandler(event:KeyboardEvent):void		{			var multiThumbs:Boolean = SliderBase(owner).thumbCount > 1;			var currentVal:Number = xPosition;			var moveInterval:Number = SliderBase(owner).snapInterval > 0 ?									  SliderBase(owner).getSnapIntervalWidth() :									  1;			var isHorizontal:Boolean =				SliderBase(owner).direction == SliderDirection.HORIZONTAL;						var newVal:Number;			if ((event.keyCode == Keyboard.DOWN && !isHorizontal) ||				(event.keyCode == Keyboard.LEFT && isHorizontal))			{				newVal = currentVal - moveInterval;			}			else if ((event.keyCode == Keyboard.UP && !isHorizontal) ||					 (event.keyCode == Keyboard.RIGHT && isHorizontal))			{				newVal = currentVal + moveInterval;			}			else if ((event.keyCode == Keyboard.PAGE_DOWN && !isHorizontal) ||					 (event.keyCode == Keyboard.HOME && isHorizontal))			{				newVal = SliderBase(owner).getXFromValue(SliderBase(owner).minimum);			}			else if ((event.keyCode == Keyboard.PAGE_UP && !isHorizontal) ||					 (event.keyCode == Keyboard.END && isHorizontal))			{				newVal = SliderBase(owner).getXFromValue(SliderBase(owner).maximum);			}						if (!isNaN(newVal))			{				event.stopPropagation();				//mark last interaction as key 				SliderBase(owner).keyInteraction = true;				moveXPos(newVal);			}		}			//--------------------------------------------------------------------------		//		//  Overridden event handlers: Button		//		//--------------------------------------------------------------------------				/**		 *  @private		 */		override protected function mouseDownHandler(event:MouseEvent):void		{			super.mouseDownHandler(event);				if (enabled)			{				// Store where the mouse is positioned				// relative to the thumb when first pressed.				xOffset = event.localX; 								systemManager.addEventListener(					MouseEvent.MOUSE_MOVE, mouseMoveHandler, true);											// in case we go offscreen				stage.addEventListener(MouseEvent.MOUSE_MOVE, 								stage_mouseMoveHandler);					SliderBase(owner).onThumbPress(this);			}		}				//--------------------------------------------------------------------------		//		//  Event handlers		//		//--------------------------------------------------------------------------			/**		 *  @private		 *  Internal function to handle mouse movements		 *  when the thumb is in a pressed state		 *  We want the thumb to follow the x-position of the mouse. 		 */		private function mouseMoveHandler(event:MouseEvent):void		{			if (enabled)			{				var pt:Point = new Point(event.stageX, event.stageY);				pt = SliderBase(owner).innerSlider.globalToLocal(pt);								// Place the thumb in the correct position.				moveXPos(pt.x - xOffset + width / 2, false, true);								// Callback to the Slider to handle tooltips and update its value.				SliderBase(owner).onThumbMove(this);			}		}			private function stage_mouseMoveHandler(event:MouseEvent):void		{			if (event.target != stage)				return;				mouseMoveHandler(event);		}	}}

⌨️ 快捷键说明

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