import flash.events.MouseEvent;
import flash.geom.Rectangle;
var scrollerArea:ScrollerArea;
var scroller:Scroller;
var _content:Content;//文本内容
var _contentArea:ContentArea;//文本显示区域
var ratioContent:Number;//文本高度与显示区域高度之比
var rangeContent:Number;//文本可移动垂直范围
var rangeScroller:Number;//滚动条可移动垂直范围
var ratio:Number;
var scrollerSpeed:Number;//0.00 to 1.00
var new_y:Number;
var dragArea:Rectangle;
scrolling(0.3);
function scrolling(speed:Number):void {
scrollerSpeed=speed;
if (scrollerSpeed<0||scrollerSpeed>1) {
scrollerSpeed=0.5;
}
scrollerArea=new ScrollerArea();
addChild(scrollerArea);
scrollerArea.x=scrollerArea.y=260;
scroller=new Scroller();
scroller.width=scrollerArea.width;
addChild(scroller);
scroller.x=scrollerArea.x;
scroller.y=scrollerArea.y;
_content=new Content();
addChild(_content);
_contentArea=new ContentArea();
_contentArea.x=scrollerArea.x-_content.width;
_contentArea.y=scrollerArea.y;
_contentArea.height=scrollerArea.height;
_content.x=_contentArea.x;
_content.y=_contentArea.y;
_content.mask=_contentArea;
ratioContent=_contentArea.height/_content.height;
scroller.height=scrollerArea.height*ratioContent;
//设置滚动条长度根据文本长度(_content.height)动态调整
rangeContent=_content.height-_contentArea.height;
rangeScroller=scrollerArea.height-scroller.height;
ratio=rangeContent/rangeScroller;
dragArea=new Rectangle(scrollerArea.x,scrollerArea.y,0,scrollerArea.height-scroller.height);
if (_content.height<=_contentArea.height) {
scroller.visible=scrollerArea.visible=false;
}
scroller.addEventListener(MouseEvent.MOUSE_DOWN,scrollerDrag);
scroller.addEventListener(MouseEvent.MOUSE_UP,scrollerDrop);
this.addEventListener(Event.ENTER_FRAME,onScroll);
}
function scrollerDrag(e:MouseEvent):void {
e.currentTarget.startDrag(false,dragArea);
stage.addEventListener(MouseEvent.MOUSE_UP,up);
//此行代码是为了防止在单击滚动条拖拽后,鼠标移到其它位置松开鼠标时,仍然会执行拖拽效果(就是说:点击滚动条拖拽后,鼠标如果移到非滚动条区域,此时松开鼠标,再移动鼠标时不会再有文本滚动效果)
}
function scrollerDrop(e:MouseEvent):void {
e.currentTarget.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP,up);
}
function up(e:MouseEvent):void {
scroller.stopDrag();
}
function onScroll( e:Event ):void {
new_y=_contentArea.y+(scrollerArea.y-scroller.y)*ratio;
_content.y += ( new_y - _content.y ) * scrollerSpeed;
}
//81行计算文本框移动后的新的y坐标,即原来的y坐标-文本框移动的垂直距离;82行也是计算文本框移动后的新的y坐标,只是为了有个动画效果,添加了一个滑动速度参数crollerpeed,如果不用这个速度参数,那么这行代码不需要写了,上一行已经得到文本框新的y坐标了。