本文引自<Flash 8 ActionScript 寶典>第30章節 建立自訂群組件.
本例實現的是一個滑動條的小列.
step 1.建立名為Slider.fla的Flash文檔.將其儲存在Slider001目錄中
step 2.在文檔中建立名為Slider的MovieClip元件.
step 3.建立Slider類,將其儲存在 Slider001\actionscriptbible\components 目錄下
//聲明名稱為Slider的類。該類位於actionscriptbible.components包中。
//該類應該護展MovieClip。
class actionscriptbible.components.Slider extends MovieClip
{
//該Slider組件由一個翻頁欄和
//一個隨著翻頁欄而移動的軌道組成
private var _mThumbBar:MovieClip;
private var _mTrack:MovieClip;
//定義一個私人屬性,以便儲存Slider組件的當前值。
//該值的範圍是0-100。
private var _nValue:Number;
//該組件使用一個接聽程式對象來檢測滑鼠移動.
private var _oMouseListener:Object;
//該組件使用下面兩個屬性來確定該組件執行個體的寬和高。
private var _nWidth:Number;
private var _nHeight:Number;
//定義一個"擷取函數"方法
//以便用value屬性名稱來公用地訪問_nValue。
public function get value():Number
{
return _nValue;
}
//定義一個建構函式。當建立該組件的一個新的執行個體時,
//就會自動調用該建構函式。
public function Slider()
{
//定義寬和高的預設值。
_nWidth=200;
_nHeight=10;
//將_nValue初始化成0.
if(_nValue==undefined)
{
_nValue=0;
}
//為翻頁欄和軌道建立影片剪輯
_mTrack=createEmptyMovieClip("_mTrack",getNextHighestDepth());
_mThumbBar=createEmptyMovieClip("_mThumbBar",getNextHighestDepth());
//繪製該組件。
draw();
//定義接聽程式對象,以便檢測滑鼠移動事件。
//該接聽程式對象調用Slider執行個體的update()方法。
_oMouseListener=new Object();
_oMouseListener.onMouseMove=mx.utils.Delegate.create(this,update);
//給名為mThumbbar的MovieClip對象
//定義onPress()方法和onRelease()方法。
_mThumbBar.onPress=mx.utils.Delegate.create(this,onPressThumbBar);
_mThumbBar.onRelease=mx.utils.Delegate.create(this,onReleaseThumbBar);
_mThumbBar.onReleaseOutside=_mThumbBar.onRelease;
}
private function draw():Void
{
//清除以前繪製的所有內容。
_mThumbBar.clear();
_mTrack.clear();
//畫一個5個象素寬的、高由_nHeight指定的翻頁欄。
_mThumbBar.lineStyle(0,0,0);
_mThumbBar.beginFill(0,100);
_mThumbBar.lineTo(5,0);
_mThumbBar.lineTo(5,_nHeight);
_mThumbBar.lineTo(0,_nHeight);
_mThumbBar.lineTo(0,0);
_mThumbBar.endFill();
//畫一個10個像素的、寬由_nWidth指定的軌道。
_mTrack.lineStyle(0,0,100);
_mTrack.lineTo(_nWidth,0);
_mTrack.lineTo(_nWidth,5);
_mTrack.lineTo(0,5);
_mTrack.lineTo(0,0);
//將軌道放置成垂直置中。
_mTrack._y=_height/2 - 2.5;
}
private function onPressThumbBar():Void
{
//當使用者在對象上按下滑鼠時,
//使該對象在指定的範圍內是可拖動的。
_mThumbBar.startDrag(false,0,0,_mTrack._width-_mThumbBar._width+.5,0);
//告訴該組件開始檢測滑鼠的移動事件。
Mouse.addListener(_oMouseListener);
}
private function onReleaseThumbBar():Void
{
//當使用者釋放翻頁欄時,就告訴Flash停止拖動該翻頁欄。
_mThumbBar.stopDrag();
//告訴該組件停止檢測滑鼠的移動事件。
Mouse.removeListener(_oMouseListener);
update();
}
//只要按下翻頁欄而滑鼠移動時,就調用update()方法。
//該方法只是更改_nValue,以便反映翻頁欄的當前x座標。
private function update():Void
{
_nValue=Math.round((_mThumbBar._x)/(_mTrack._width + .5 -_mThumbBar._width) * 100);
}
}
step 4.在Flash文檔中將Slider元件連結標識符設為Slider,AS 2.0 Class:actionscriptbible.components.Slider即完全限定名.
step 5.建立Slider元件的執行個體.名為sldExample
step 6.建立Actions圖層,在第一幀中加入以下代碼:
setInterval(checkValue,1000);
function checkValue():Void
{
trace(sldExample.value);
}
step 7.測試.應該看到Slider執行個體和被顯示在Output面板中的值.當拖動滑塊可改變該值.