Basic and simple ScrollBar class based on com.jeroenwijering.utils.Scrollbar
/** * com.deviouswork.display.utils.ScrollBar * @version 1.0.0 * @author Joakim Roos | j at deviouswork dot com * * Bases on com.jeroenwijering.utils.Scrollbar - but allowing any displayobject * to be scrolled and using any graphics as a scroll. * (http://developer.longtailvideo.com/trac/browser/trunk/as3/com/jeroenwijering/utils/Scrollbar.as) * * Copyright (c) 2009 Deviouswork * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ package com.deviouswork.display.utils { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * ScrollBar */ public class ScrollBar { private var _scroll : Sprite; private var _scrollBar : DisplayObject; private var _scrollTrack : DisplayObject; private var _scrollTarget : DisplayObject; private var _mask : DisplayObject; private var _proportions_num : Number; /* * STATIC vars unused at the moment. */ public static var VERTICAL : String = "vertical"; public static var HORIZONTAL : String = "horizontal"; /** * Constructor * * @param target DisplayObject to scroll. * @param mask DisplayObject that masks the target. * @param bar DisplayObject used as graphic representation of the scrollbar. * @param track DisplayObject used to guide the bar. */ public function ScrollBar(target : DisplayObject, mask : DisplayObject, bar : DisplayObject, track : DisplayObject) : void { _scrollTarget = target; _mask = mask; _scrollBar = bar; _scrollTrack = track; MovieClip(_scrollTrack.parent).removeChild(_scrollTrack); MovieClip(_scrollBar.parent).removeChild(_scrollBar); _scroll = new Sprite(); _scrollTrack.x = 0; _scrollTrack.y = 0; _scrollBar.x = 0; _scrollBar.y = 0; _scroll.addChild(_scrollTrack); _scroll.addChild(_scrollBar); MovieClip(_scrollTarget.parent).addChild(_scroll); _scroll.buttonMode = true; }; /** * Add events for the scroll and sets the correct proportions. */ public function draw() : void { _scrollTarget.y = _mask.y; _scroll.x = _mask.x + _mask.width + _scrollTrack.width/4; _scroll.y = _mask.y; _proportions_num = _mask.height / _scrollTarget.height; if(_proportions_num < 1) { _scroll.visible = true; _scrollTrack.height = _mask.height; _scrollBar.height = _mask.height * _proportions_num; var hitShape : Sprite = new Sprite(); hitShape.graphics.beginFill(0xfff000, 0); hitShape.graphics.drawRect(_scrollTrack.x, _scrollTrack.y, _scrollTrack.width * 2, _scrollTrack.height); hitShape.graphics.endFill(); hitShape.x = -_scrollTrack.width/ 4; _scroll.addChild(hitShape); _scroll.addEventListener(MouseEvent.MOUSE_DOWN, _onMouseDown); } else { _scroll.visible = false; _scroll.removeEventListener(MouseEvent.MOUSE_DOWN, _onMouseDown); } }; /** * Event Handlers */ private function _onMouseDown(event_m : MouseEvent) : void { _scroll.addEventListener(Event.ENTER_FRAME, _onScrollTarget); _mask.stage.addEventListener(MouseEvent.MOUSE_UP, _onMouseUp); }; private function _onMouseUp(event_m : MouseEvent) : void { _scroll.removeEventListener(Event.ENTER_FRAME, _onScrollTarget); _mask.stage.removeEventListener(MouseEvent.MOUSE_UP, _onMouseUp); }; private function _onScrollTarget(event : Event) : void { var mps : Number = _scroll.mouseY; if(mps < _scrollBar.height / 2) { _scrollBar.y = 0; _scrollTarget.y = _mask.y; } else if (mps > _scroll.height - _scrollBar.height / 2) { _scrollBar.y = _scroll.height - _scrollBar.height; _scrollTarget.y = _mask.y + _mask.height - _scrollTarget.height; } else { _scrollBar.y = mps - _scrollBar.height / 2; _scrollTarget.y = _mask.y + _mask.height / 2 - mps / _proportions_num; } }; } } |