リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ スライダー

ActionScript

スライダー

コンポーネントでも標準で装備されているが、自作した場合のサンプル。

JavaScriptを有効にし、最新のFlashPlayerをインストールお願いしますGet Adobe Flash player

ソースのダウンロード(fla)
概要としては、透明のヒット領域をマウス左プレスでx座標を取得するタイマーを起動させている。

AS3 アクションフレーム

tumami_mc.x = 0;//つまみ初期位置
hit_mc.buttonMode = true;

//マウスチェック
var mouseC:int = 0;//0→無し 1→プレス状態
var asobi:int = 20;//スライダの片側遊び長さ
var mSpeed:Number = 0.6;//カーソール移動スピード

//ダウンタイマー
var down_timer:Timer= new Timer(1000*0.01);//1秒3回 リセット忘れ注意
down_timer.addEventListener(TimerEvent.TIMER,down_timer_f);

//マウスが押されたら
hit_mc.addEventListener(MouseEvent.MOUSE_DOWN,hitDown);
function hitDown(event:MouseEvent):void {
	mouseC = 1;
	tumami_mc.gotoAndPlay("On");

	//モーションタイマ
	var m_timer:Timer= new Timer(1000*0.02,4);//0.02秒4回 
	m_timer.addEventListener(TimerEvent.TIMER,m_timer_f);
	m_timer.addEventListener(TimerEvent.TIMER_COMPLETE,m_timer_c_f);
	m_timer.start();

	function m_timer_f(e:TimerEvent):void {
		if (hit_mc.mouseX <= 0) {//min側 遊び範囲なら
			tumami_mc.x += (0-tumami_mc.x)*mSpeed;
			tf1_mc.text = "0";
		} else if (hit_mc.mouseX >= hit_mc.width - asobi*2) {//max側 遊び範囲なら
			tumami_mc.x += ((hit_mc.width - asobi*2)-tumami_mc.x)*mSpeed;
			tf1_mc.text = String(hit_mc.width - asobi*2);
		} else {//移動範囲なら
			tumami_mc.x += (hit_mc.mouseX-tumami_mc.x)*mSpeed;
			tf1_mc.text = String(hit_mc.mouseX);
		}
		e.updateAfterEvent();
	}
	//モーションタイマ終了イベント
	function m_timer_c_f(e:TimerEvent):void {
		if (hit_mc.mouseX <= 0) {//min側 遊び範囲なら
			tumami_mc.x = 0;
			tf1_mc.text = "0";
		} else if (hit_mc.mouseX >= hit_mc.width - asobi*2) {//max側 遊び範囲なら
			tumami_mc.x = hit_mc.width - asobi*2;
			tf1_mc.text = String(hit_mc.width - asobi*2);
		} else {//移動範囲なら
			tumami_mc.x = hit_mc.mouseX;
			tf1_mc.text = String(hit_mc.mouseX);
		}
		//マウスが押しっぱなしだったらダウンタイマーへ移行
		if (mouseC == 1) {
			down_timer.start();
		}
	}
}

//マウスダウン中実行(タイマー)
function down_timer_f(e:TimerEvent):void {
	if (hit_mc.mouseX <= 0) {//min側 遊び範囲なら
		tumami_mc.x = 0;
		tf1_mc.text = "0";
	} else if (hit_mc.mouseX >= hit_mc.width - asobi*2) {//max側 遊び範囲なら
		tumami_mc.x = hit_mc.width - asobi*2;
		tf1_mc.text = String(hit_mc.width - asobi*2);
	} else {//移動範囲なら
		tumami_mc.x = hit_mc.mouseX;
		tf1_mc.text = String(hit_mc.mouseX);
	}
	e.updateAfterEvent();
}

//マウスアップされたら
hit_mc.addEventListener(MouseEvent.MOUSE_UP,hitUp);
function hitUp(event:MouseEvent):void {
	mouseC = 0;
	tumami_mc.gotoAndPlay("Off");
	down_timer.reset();
}

//ヒットエリアから離れたら
hit_mc.addEventListener(MouseEvent.MOUSE_OUT,hitOut);
function hitOut(event:MouseEvent):void {
	if (mouseC == 1) {
		mouseC = 0;
		tumami_mc.gotoAndPlay("Off");
		down_timer.reset();
	}
}
last update 2010.3.15
参考・出典等
「特に無し」

▲page top

topmemogalleryblogtestaboutlinksmail
Copylight(C)2008-2010 Riptac. All Rights Reserved.