如果你不知道怎么在flash里面创建可拖动的进度条,那么这篇文字就是为你写的。 首先, 我们要做的进度条是可以复用的, 它可以用于加载, 滚动条, 搜索框及图表功能. 另外,使用自己做的进度条替代flash里面的进度条组件有助于减小文件体积。

实例效果如下:

http://amyflash.duapp.com//swf/dragbar.swf

文件设置

在flash里面创建一个新的ActionScript 3.0文件, 590x300px为舞台大小, 文件命名为progressBar.as。 我们的Progress Bar将包含 2 个元件 – bar skin(你马上会看到)和 track skin (可拖动的); 关联这两个图像, 然后创建一个新的元件, 命名为 percentBar.

拖动的时候, 你想在某处展示进度并使用该值去滚动或者做些别的事情. 为了达到目的,我们需要创建一个 info box, 用来展示百分比.首先,你得在舞台上创建一个实例名为boxInfo的元件, 再在该元件里面添加一个动态文本,并命名为 txt.

DraggableProgressBar.as

创建一个名为DraggableProgressBar.as的文件, 把progress bar里的元件全部声明为公有变量:

public var trackSkin:MovieClip;
public var barSkin:MovieClip;
public var percent:int = 0;

当trackskin被拖动的时候,percent变量将发生变化.初始函数里面我们做了如下事情:

  • 设置progressbar为buttonMode;
  • 设置 trackSkin的宽度为 0;
  • 侦听鼠标的 DOWN 和 UP事件;
private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            trackSkin.width = 0;
            buttonMode = true;
            mouseChildren = false;

            addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            addEventListener(MouseEvent.MOUSE_OUT, onMouseUp);
        }
当鼠标按下的时候,我们添加了一个enterframe的侦听器,因此在拖动的时候,
我们可以根据鼠标的x坐标知道trackSkin的大小为多少,当鼠标弹起的时候,移除侦听。
private function onMouseDown(e:MouseEvent):void
{
    addEventListener(Event.ENTER_FRAME, stateBar);
}

private function onMouseUp(e:MouseEvent):void
{
    removeEventListener(Event.ENTER_FRAME, stateBar);
}

让我们看看stateBar函数长啥样:

trackSkin.width = Math.min(mouseX, barSkin.width);
percent = (trackSkin.width / barSkin.width) * 100;
dispatchEvent(new Event(Event.COMPLETE));

第一行根据mouseX增加或者减少trackSkin的宽度, 不会超过最大值; 第2行计算百分比; 第三行向主类发送一个事件,通知主类百分比发生变化了。

Main Class

创建主类Main.as:

package {
import flash.events.Event;
import flash.display.MovieClip;
public class Main extends MovieClip {
public var boxInfo:MovieClip;
public var progressBar:DragBar;
public function Main() {
boxInfo.x=progressBar.x;
boxInfo.txt.text=progressBar.percent;
progressBar.addEventListener(Event.COMPLETE, getValue);
}
private function getValue(e:Event) {
boxInfo.txt.text=progressBar.percent;
boxInfo.x=Math.max(mouseX,Math.min(progressBar.x,progressBar.width));
}
}
}

保存,搞定!