本文引自<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);
}
}
//该类应该护展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);
}
function checkValue():Void
{
trace(sldExample.value);
}
step 7.测试.应该看到Slider实例和被显示在Output面板中的值.当拖动滑块可改变该值.