|
之前写过一个简单的教程,但有只是滚动条拖动的计算。。之后就有很多初学者一直pm来说textfield中的文字增加了,滚动条不会刷新。那么今天有空就拿回来改了一下,顺便弄成class的简单格式,当然有兴趣的朋友可以自己增加功能之后制作成自己的组件
class ScrollText{
private var root:MovieClip;
private var barObj:MovieClip;
private var textObj:TextField;
public var __width:Number = 300;
public var __height:Number = 200;
public var min:Number;
public var max:Number;
public var inc:Number;
public function ScrollText(mc:MovieClip, depth:Number) {
var target:Object = this;
root = mc.createEmptyMovieClip("__scrollText", depth); //根据使用者提供的深度创建一个mc
createObj(); //建立文本和滚动条
barObj.onPress = function() { //滚动条按下进行拖动的动作
this.onEnterFrame = function() { //此循环是为了得到最新可拖动范围的值
this.startDrag(false, this._x, target.min, this._x, target.max); //设定拖动范围
target.textObj.scroll = int(this._y/target.inc); //根据滚动条的位置设定文字所滚动到的位置
};
}
barObj.onRelease = barObj.onReleaseOutside = function() { //放开滚动条的动作
this.stopDrag(); //停止拖动
delete this.onEnterFrame; //删除循环事件以减少计算量
}
}
private function createObj():Void {
root.createTextField("__textArea",0,0,0,this.__width,this.__height); //创建文本
textObj = root.__textArea;
textObj.border = true; //显示文本的边框
textObj.text = "Coding by Super-Tomato"; //设定文本的文字
barObj = root.createEmptyMovieClip("__scrollBar",1); //建立滚动条
barObj._x = this.__width + 5; //设定滚动条的位置
with(barObj) { //画出滚动条
beginFill(0xFF9900);
lineTo(20, 0);
lineTo(20, this.__height);
lineTo(0, this.__height);
lineTo(0,0);
endFill();
}
}
private function refreshScroll():Void {
var newHeight:Number = textObj._height / textObj.textHeight; //计算文本的高度和文字高度的比例
if(newHeight < 1) { //如果文字的高度大于文本所能够显示的高度
barObj._height = newHeight * textObj._height; //更新滚动条的长度
} else { //文本内容少于显示范围
barObj._height = this.__height; //滚动条的长度就等于原来所设定的高度
}
this.min = textObj._y; //文本的顶点位置
this.max = this.min+(textObj._height - barObj._height); //滚动条所能拖动的最低范围
this.inc = int(Math.abs(this.max-this.min)/textObj.maxscroll); //根据文本最大的滚动值计算滚动条能够拖动的距离
}
public function set _text(txt:String):Void {
textObj.text = txt; //更新文本的文字
refreshScroll();
}
}
使用:
var scroller = new ScrollText(this,1); //创建,第一参数是对象, 第二参数是深度
scroller._text = "abcdef"; //设定文字
例子: Flash: http://super-tomato.aspfreeserver.com/example/ScrollBar.swf
[ 本帖最后由 super-tomato 于 15-2-2006 07:29 PM 编辑 ] |
|