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);
}
}
}