ActionScript Learning 101023

10.23.2010

Flashで自分用にカスタム可能なスライダーを制作する。

何度も作り直していたスライダーだけど、最近は使いまわすことが多くなったのでまとめておく。

独自イベントを設定してあるので、任意のイベントで処理を実行する。単純にスライダーの値だけを取得して、処理はその都度イベントに設定する仕様が、仕事では使い勝手が良い。 応用すればスクロールにも使用できるはず。

SAMPLE VIEW CODE

package {
	
	import flash.display.*;
	import flash.text.*;
	import flash.events.*;
	

	public class NMain extends MovieClip {
		
		//-------------------------------------------------------------------------------- Properties
		
		private var _this:*;
		private var _stage:Stage;
		
		private var _main:MovieClip;
		
		
		//-------------------------------------------------------------------------------- Constractor
		
		public function NMain() {
			
			_this = this;
			_stage = stage;
			
			_stage.scaleMode = StageScaleMode.NO_SCALE;
			_stage.align = StageAlign.TOP_LEFT;
			
			Init();
		}
		
		
		//-------------------------------------------------------------------------------- Function
		 
		/**
		 * Init
		 */
		public function Init():void {
			
			setsliderset_v();
			
			setsliderset_h();
		}		

		/**
		 * vertical
		 */
		private var _slider_v:MovieClip;
		private var _grip_v:MovieClip;
		private var _back_v:MovieClip;
		private var sliderset_v:*;
		
		private function setsliderset_v():void {
			
			_slider_v = new MovieClip();
			sliderset_v = new NM_Sliderset();			
			
			_slider_v.addChild(sliderset_v);
			_this.addChild(_slider_v);			
			
			_slider_v.x = 240;
			_slider_v.y = 51;
			
			sliderset_v.Init(330);
			
			_grip_v = new grip_v();
			_grip_v.buttonMode = true;
			
			sliderset_v.changeGripimage(_grip_v);			
			
			_back_v = new back_v();
			
			sliderset_v.SliderBack.alpha = 0;

			_slider_v.addChildAt(_back_v, 0);
			
			//sliderset_v.resizeSlider(330);
			
			sliderset_v.addEventListener("SLIDER_START", sliderset_v_start);
			sliderset_v.addEventListener("SLIDER_STOP", sliderset_v_stop);
			sliderset_v.addEventListener("SLIDER_MOVE", sliderset_v_move);
			
			
			setsliderval_v();
			
			setjumpbtn_v();
		}
		//
		private function sliderset_v_start(eo:* = null):void {
			
			trace("sliderset_v_start");
		}
		//
		private function sliderset_v_stop(eo:* = null):void {			
			
			trace("sliderset_v_stop");
		}
		//
		private function sliderset_v_move(eo:* = null):void {			
			
			//trace("sliderset_v_move:" + sliderset_v.SliderValue);
			
			_sloderval_v.t.text = sliderset_v.SliderValue;
		}
		/** */
		private var _sloderval_v:MovieClip;
		
		private function setsliderval_v():void {
			
			_sloderval_v = new slidervalue();
			
			_sloderval_v.y = 165;
			_sloderval_v.x = 80;
			
			_sloderval_v.t.text = 0;
			
			_slider_v.addChild(_sloderval_v);
		}
		/** */
		private function setjumpbtn_v():void {
			
			for(var i = 0; i < 6; i ++) {
				
				var jumpbtn = new jumpbutton();
				
				var num = Math.round(100 * Math.random()) / 100;
				
				jumpbtn.t.text = num;	
				jumpbtn.t.mouseEnabled = false;
				jumpbtn.x = -80;
				jumpbtn.y = 60 * i + 10;
				jumpbtn.buttonMode = true;
				
				_slider_v.addChild(jumpbtn);
				
				jumpbtn.addEventListener(MouseEvent.CLICK, jumpbtn_v_click);
			}
		}
		//
		private function jumpbtn_v_click(eo:* = null):void {
			
			var tgtbtn = eo.currentTarget;
			
			sliderset_v.SetsliderValue(new Number(tgtbtn.t.text));
		}

		/**
		 * horizontal
		 */
		private var _slider_h:MovieClip;
		private var _grip_h:MovieClip;
		private var _back_h:MovieClip;
		private var sliderset_h:*;
		
		private function setsliderset_h():void {
			
			_slider_h = new MovieClip();
			sliderset_h = new NM_Sliderset();			
			
			sliderset_h.rotation = -90;
			
			_slider_h.addChild(sliderset_h);
			_this.addChild(_slider_h);			
			
			_slider_h.x = 515;
			_slider_h.y = 256;
			
			sliderset_h.Init(280);
			
			_grip_h = new grip_h();
			_grip_h.buttonMode = true;
			
			sliderset_h.changeGripimage(_grip_h);
			
			
			_back_h = new back_h();
			_back_h.rotation = -90;
			
			sliderset_h.SliderBack.alpha = 0;

			_slider_h.addChildAt(_back_h, 0);
			
			sliderset_h.addEventListener("SLIDER_START", sliderset_h_start);
			sliderset_h.addEventListener("SLIDER_STOP", sliderset_h_stop);
			sliderset_h.addEventListener("SLIDER_MOVE", sliderset_h_move);
			
			
			setsliderval_h();
			
			setvolume_h();
		}
		//
		private function sliderset_h_start(eo:* = null):void {
			
			trace("sliderset_h_start");
		}
		//
		private function sliderset_h_stop(eo:* = null):void {			
			
			trace("sliderset_h_stop");
		}
		//
		private function sliderset_h_move(eo:* = null):void {
			
			_volume_h.v.scaleX = sliderset_h.SliderValue;
			
			_sloderval_h.t.text = sliderset_h.SliderValue;
		}
		/** */
		private var _sloderval_h:MovieClip;
		
		private function setsliderval_h():void {
			
			_sloderval_h = new slidervalue();
			
			_sloderval_h.y = 60;
			_sloderval_h.x = 140;
			
			_sloderval_h.t.text = 0;
			
			_slider_h.addChild(_sloderval_h);
		}
		/** */
		private var _volume_h:MovieClip;
		
		private function setvolume_h():void {
			
			_volume_h = new volume_h();
			_volume_h.y = -2;
			_volume_h.x = 0;
			
			_volume_h.v.scaleX = 0;
			
			_slider_h.addChildAt(_volume_h, 0);
			
			_volume_h.addEventListener(MouseEvent.CLICK, volume_h_click);
		}
		//
		private function volume_h_click(eo:* = null):void {
			
			var tgtbtn = eo.currentTarget;			
			
			sliderset_h.SetsliderValue(tgtbtn.mouseX / 280);
		}
	}
}


package {
	
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;


	public class NM_Sliderset extends MovieClip {
	
		//-------------------------------------------------------------------------------- Properties
		
		private var _this:*;
		public var _stage:*;
		
		private var grip:MovieClip;		
		private var gripmc:MovieClip;
		private var back:MovieClip;
		
		private var backhei:Number;
		
		private var sliderval:Number;
		
		private var ymax:Number;
		
		
		
		//-------------------------------------------------------------------------------- Constractor
		
		public function NM_Sliderset():void {
			
			_this = this;
		}
		
		
		//-------------------------------------------------------------------------------- get && set
		
		public function get SliderValue():Number {return sliderval;}

		public function get SliderGrip():Sprite {return grip;}
		public function get SliderBack():Sprite {return back;}
		
		
		//-------------------------------------------------------------------------------- Function
		
		/**
		 * 初期化
		 */
		public function Init(slidersize:Number):void {
			
			_stage = _this.stage;
			
			backhei = slidersize;
			
			sliderval = 0;
			
			makeslider();
		}
		
		/**
		 * スライダーの作成
		 */
		private function makeslider():void {
			
			grip = new MovieClip();
			gripmc = new MovieClip();
			gripmc.graphics.beginFill(0x444444, .2);
			gripmc.graphics.drawRect(0, -20, 10, 40);
			gripmc.graphics.endFill();
			grip.addChild(gripmc);
			
			
			back = new MovieClip();
			back.graphics.beginFill(0xEFEFEF);
			back.graphics.drawRect(0, 0, 10, backhei);
			back.graphics.endFill();

			
			grip.addEventListener(MouseEvent.MOUSE_DOWN, grip_mousedown);
			
			_this.addChild(back);
			_this.addChild(grip);		
			
			resizeSlider(backhei);
		}

		/**
		 * グリップ
		 */
		private var girpmove:Boolean;
		//
		public function grip_mousedown(eo:* = null):void {

			
			grip.addEventListener(MouseEvent.MOUSE_UP, grip_mouseup);
			_stage.addEventListener(MouseEvent.MOUSE_UP, grip_mouseup);
			
			grip.addEventListener(MouseEvent.MOUSE_MOVE, grip_mousemove);
		}
		//
		public function grip_mouseup(eo:* = null):void {
			
			gripdrag_stop();
			
			grip.removeEventListener(MouseEvent.MOUSE_UP, grip_mouseup);
			_stage.removeEventListener(MouseEvent.MOUSE_UP, grip_mouseup);
			
			grip.removeEventListener(MouseEvent.MOUSE_MOVE, grip_mousemove);
			
			girpmove = false;
		}
		//
		public function grip_mousemove(eo:* = null):void {
			
			if(!girpmove) gripdrag_start();
			
			girpmove = true;
		}
			
		
		/**
		 * グリップドラッグ
		 */
		private var mousdowny:Number;
		
		private function gripdrag_start():void {
			
			mousdowny = grip.mouseY;
			
			gripslider_start();
			
			grip.addEventListener(Event.ENTER_FRAME, grip_moving);
		}
		private function gripdrag_stop():void {
			
			gripslider_stop();
			
			grip.removeEventListener(Event.ENTER_FRAME, grip_moving);
		}
		
		/** */
		private function grip_moving(eo:* = null):void {

			var posy = _this.mouseY - mousdowny;
			
			if(posy <= 0) posy = 0;
			else if(posy >= ymax) posy = ymax;
			
			grip.y = posy;
		}
		
		/**
		 * グリップアクション
		 */
		//
		private function gripslider_start():void {
			
			dispatchEvent(new Event("SLIDER_START"));
			
			_this.addEventListener(Event.ENTER_FRAME, grip_enterframe);
		}
		//
		private function gripslider_stop():void {
			
			dispatchEvent(new Event("SLIDER_STOP"));

			_this.removeEventListener(Event.ENTER_FRAME, grip_enterframe);
		}
		//
		private function grip_enterframe(eo:* = null):void {
			
			setsliderval();
		}
		
		/**
		 * スライダーの値を送信
		 */
		private function setsliderval():void {
			
			sliderval = grip.y / ymax;
			
			sliderval = Math.round((sliderval * 100)) / 100;
			if(sliderval <= 0) sliderval = 0;
			if(sliderval >= 1) sliderval = 1;

			dispatchEvent(new Event("SLIDER_MOVE"));
		}
		
		/**
		 * スライダーの値を設定
		 */
		public function SetsliderValue(sval:Number):void {
			
			grip.y = ymax * sval;
			
			setsliderval();
		}

		/**
		 * スライダーのリサイズ
		 */
		public function resizeSlider(slidersize:Number):void {
			
			ymax = back.height = slidersize;

			grip.y = ymax * sliderval;
		}
		

		/**
		 * グリップのイメージを変更
		 */
		public function changeGripimage(newgripmc:MovieClip):void {
			
			grip.removeChild(gripmc);
			gripmc = newgripmc;
			gripmc.y = 0;
			grip.addChild(gripmc);
		}
		
	}
}


category : ActionScript / Flash

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category