
Код AS3:
package com.in4core.navigation
{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.errors.IllegalOperationError;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.text.TextField;
/**
* ...
* @author in4core
* Display or Text Object Scroller
* use addScroll methods to define Scroller
* Version 1.0
*/
public final class UIScrollBar
{
//-----------------DisplayObjectInit-----------//
/*objects*/
private var _scroll:Sprite;
private var _mask:DisplayObject;
private var _content:DisplayObject;
private var _rect:Rectangle;
/*coords*/
private var _startYScroll:int;
private var _startYContent:int;
private var _wayOfScroll:int;
//-----------------TextFieldInit-----------//
/*objects*/
private var _tscroll:Sprite;
private var _tf:TextField;
private var _trect:Rectangle;
/*coords*/
private var _wayOfTextScroll:int;
/////////////////////////////////////////////////////////////////////
//!4
//! 4 PUBLIC
//! 4
/////////////////////////////////////////////////////////////////////
public function addScrollObject( scroll:Sprite,mask:DisplayObject,content:DisplayObject,way:int ):void {
this._scroll = scroll;
this._mask = mask;
this._content = content;
this._wayOfScroll = way;
this._startYScroll = _scroll.y;
this._startYContent = _content.y;
this._rect = new Rectangle(_scroll.x, _scroll.y, 0, _wayOfScroll);
/*events*/
_scroll.addEventListener(Event.ADDED_TO_STAGE , onScrollAdded);
}
private function onScrollAdded(e:Event) {
_scroll.removeEventListener(Event.ADDED_TO_STAGE , onScrollAdded);
_scroll.addEventListener(MouseEvent.MOUSE_DOWN, dragStart);
_scroll.stage.addEventListener(MouseEvent.MOUSE_UP, dragStop);
trace( 'UIScrollBar-Display : INIT' );
}
public function addScrollText( tf:TextField , scroll:Sprite , way:int ):void {
this._tscroll = scroll;
this._tf = tf;
this._wayOfTextScroll = way;
this._trect = new Rectangle(_tscroll.x, _tscroll.y, 0, _wayOfTextScroll);
/*events*/
_tscroll.addEventListener(Event.ADDED_TO_STAGE , onTScrollAdded);
}
private function onTScrollAdded(e:Event) {
_tscroll.removeEventListener(Event.ADDED_TO_STAGE , onScrollAdded);
_tscroll.addEventListener(MouseEvent.MOUSE_DOWN , tdragStart);
_tscroll.stage.addEventListener(MouseEvent.MOUSE_UP , tdragStop);
trace( 'UIScrollBar-Text : INIT' );
}
public function destroy():void {
if (_scroll != null ) {
_scroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE, updatePosition);
_scroll.removeEventListener(MouseEvent.MOUSE_DOWN, dragStart);
_scroll.stage.removeEventListener(MouseEvent.MOUSE_UP, dragStop);
}
if (_tscroll != null ) {
_tscroll.removeEventListener(MouseEvent.MOUSE_DOWN , tdragStart);
_tscroll.stage.removeEventListener(MouseEvent.MOUSE_UP , tdragStop);
_tscroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE ,updateTextPosition);
}
trace( 'UIScrollBar : REMOVED' );
}
/////////////////////////////////////////////////////////////////////
//!4
//! 4 PRIVATE
//! 4
/////////////////////////////////////////////////////////////////////
private function tdragStart(e:MouseEvent):void {
_tscroll.startDrag(false, _trect);
_tscroll.stage.addEventListener(MouseEvent.MOUSE_MOVE ,updateTextPosition);
}
private function tdragStop(e:MouseEvent):void {
_tscroll.stopDrag();
_tscroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE ,updateTextPosition);
}
private function dragStart(e:MouseEvent):void {
_scroll.startDrag(false, _rect);
_scroll.stage.addEventListener(MouseEvent.MOUSE_MOVE, updatePosition);
}
private function dragStop(e:MouseEvent):void {
_scroll.stopDrag();
_scroll.stage.removeEventListener(MouseEvent.MOUSE_MOVE, updatePosition);
}
private function updatePosition (e:MouseEvent):void {
if (_mask.height < _content.height)
{
_scroll.mouseEnabled = true;
_content.y = _startYContent - ( (_content.height - _mask.height) / _wayOfScroll ) * ( _scroll.y - _startYScroll );
}
else _scroll.mouseEnabled = false;
updateVisible();
}
private function updateTextPosition(e:MouseEvent):void {
_tf.scrollV = Math.round(((_tscroll.y - _trect.y) / _wayOfTextScroll ) * _tf.maxScrollV);
}
private function updateVisible():void {
if (_mask.height < _content.height) _scroll.visible = true;
else _scroll.visible = false;
}
}
}