Показать сообщение отдельно
Старый 19.05.2014, 01:55
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 14  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну вот, например, мой, кривоватый, но рабочий скроллбар.
В него передаёте экземпляр класса 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);
		}
	}
 
}
__________________
There is no thing in this world that is not simple.