滚动条

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坐标了。
原文地址:https://www.cnblogs.com/leon3286/p/1749134.html