Ну вот, например, мой, кривоватый, но рабочий скроллбар.
В него передаёте экземпляр класса TextField, и он использует его scrollV и maxScrollV для прокрутки, а также передать ширину и высоту.
Разбирайтесь) Вам останется только заменить scrollV на scrollRect аналоги и принимать спрайт.
P.S. Хотя тут много лишнего, поэтому проще воспользоваться компонентом)

Код AS3:
package com.general
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.events.Event;
import com.engine.core.App;
public class ScrollBar extends Sprite
{
private const MIN_DRAG_HEIGHT:int = 9;
private var _tf:TextField;
private var _drag:Sprite;
private var _width:int;
private var _height:int;
public function ScrollBar(tf:TextField, width:int, height:int)
{
trace("... ScrollBar initialized.");
super();
_tf = tf;
_width = width;
_height = height;
_drag = new Sprite();
drawBackground();
drawDrag();
updateDrag();
_drag.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
_tf.addEventListener(Event.SCROLL, updateDrag);
}
private function scrollUp(e:MouseEvent):void
{
if(_tf.scrollV - 5 >= 0)
_tf.scrollV -= 5;
else _tf.scrollV = 0;
}
private function scrollDown(e:MouseEvent):void
{
if(_tf.scrollV + 5 <= _tf.maxScrollV)
_tf.scrollV += 5;
}
private function drawDrag():void
{
_drag.graphics.lineStyle(1, 0x435249, 0.7);
_drag.graphics.beginFill(0xb9e6ca, 0.6);
_drag.graphics.drawRect(0, 0, _width, _height);
_drag.graphics.endFill();
}
private function startDragging(e:MouseEvent):void
{
_drag.removeEventListener(MouseEvent.MOUSE_DOWN, startDragging);
_tf.removeEventListener(Event.SCROLL, updateDrag);
stage.addEventListener(MouseEvent.MOUSE_MOVE, updateDragging);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragging);
}
private function updateDragging(e:MouseEvent):void
{
if(e.stageY > _drag.height / 2 && e.stageY < _height - _drag.height / 2)
_drag.y = e.stageY - _drag.height / 2;
else
{
if(e.stageY <= _drag.height / 2)
_drag.y = 0;
else
_drag.y = _height - _drag.height;
}
_tf.scrollV = _tf.maxScrollV * ((_drag.y) / (_height - _drag.height));
}
private function stopDragging(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, updateDragging);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragging);
_drag.addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
_tf.addEventListener(Event.SCROLL, updateDrag);
}
private function drawBackground():void
{
super.graphics.lineStyle(1, 0x0d3d1f, 0.7);
super.graphics.beginFill(0x749380, 0.6);
super.graphics.drawRect(0, 0, _width, _height);
super.graphics.endFill();
super.cacheAsBitmap = true;
}
public function updateDrag(e:Event = null):void
{
_drag.scaleY = 1 - _tf.maxScrollV / _tf.height;
if(_drag.scaleY < 0.05)
{
_drag.scaleY = 1;
_drag.height = MIN_DRAG_HEIGHT;
}
_drag.y = _tf.scrollV / _tf.maxScrollV * (_height - _drag.height);
addChild(_drag);
}
}
}