In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

スクロールバー (2)

//////////////////////////////////////////////////////////////////////////////
スクロールバー (2)
//////////////////////////////////////////////////////////////////////////////
Get Adobe Flash player
by ProjectNya 18 Aug 2010
/**
 * Copyright ProjectNya ( http://wonderfl.net/user/ProjectNya )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/dI2R
 */

////////////////////////////////////////////////////////////////////////////////
//  スクロールバー (2)
////////////////////////////////////////////////////////////////////////////////

package {

    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.geom.Matrix;
    import flash.display.GradientType;
    import flash.display.SpreadMethod;
    import flash.display.InterpolationMethod;

    [SWF(backgroundColor="#FFFFFF", width="465", height="465", frameRate="30")]

    public class Main extends Sprite {
        private var panel:Shape;
        private var _mask:Shape;
        private var scrollBar:ScrollBar;

        public function Main() {
            //Wonderfl.capture_delay(1);
            init();
        }

        private function init():void {
            panel = new Shape();
            addChild(panel);
            panel.x = 10;
            panel.y = 10;
            var matrix:Matrix = new Matrix();
            matrix.createGradientBox(425, 1000, Math.PI/2, 0, 0);
            panel.graphics.beginGradientFill(GradientType.LINEAR, [0x000000, 0xFF0000], [1, 1], [0, 255], matrix, SpreadMethod.PAD, InterpolationMethod.RGB, 0);
            panel.graphics.drawRect(0, 0, 425, 1000);
            panel.graphics.endFill();
            _mask = new Shape();
            //addChild(_mask);
            _mask.x = 10;
            _mask.y = 10;
            _mask.graphics.beginFill(0x000000);
            _mask.graphics.drawRect(0, 0, 425, 445);
            _mask.graphics.endFill();
            panel.mask = _mask;
            //
            scrollBar = new ScrollBar();
            addChild(scrollBar);
            scrollBar.x = 437;
            scrollBar.y = 10;
            scrollBar.init({height: 445});
            scrollBar.setTarget(panel, _mask);
        }

    }

}


////////////////////////////////////////////////////////////////////////////////
//  ScrollBarクラス
////////////////////////////////////////////////////////////////////////////////

import flash.display.Sprite;
import flash.display.Shape;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.geom.ColorTransform;

class ScrollBar extends Sprite {
    public var id:uint;
    private static var _width:uint = 16;
    private var _height:uint;
    private var track:Sprite;
    private var thumb:Sprite;
    private var base:Shape;
    private var handle:Shape;
    private static var bColor:uint = 0xEEEEEE;
    private static var tColor:uint = 0x000000;
    private static var hColor:uint = 0x999999;
    private static var upColor:uint = 0x333333;
    private static var overColor:uint = 0x444444;
    private static var offColor:uint = 0xCCCCCC;
    private static var upColorTrans:ColorTransform;
    private static var overColorTrans:ColorTransform;
    private static var offColorTrans:ColorTransform;
    private static var minHeight:uint = 30;
    private var maxHeight:uint;
    private var thumbHeight:uint = minHeight;
    private var target:DisplayObject;
    private var rect:DisplayObject;
    private var clickPos:Number;
    private var basePos:int;
    private var targetPos:int;
    private static var deceleration:Number = 0.05;
    private var _enabled:Boolean = true;

    public function ScrollBar() {
    }

    public function init(option:Object):void {
        if (option.id != undefined) id = option.id;
        if (option.height != undefined) _height = option.height;
    }
    public function setTarget(t:DisplayObject, r:DisplayObject):void {
        target = t;
        rect = r;
        basePos = target.y;
        thumbHeight = Math.max(minHeight, uint(rect.height/target.height*_height))
        maxHeight = _height - thumbHeight;
        draw();
    }
    private function draw():void {
        upColorTrans = new ColorTransform();
        upColorTrans.color = upColor;
        overColorTrans = new ColorTransform();
        overColorTrans.color = overColor;
        offColorTrans = new ColorTransform();
        offColorTrans.color = offColor;
        track = new Sprite();
        thumb = new Sprite();
        base = new Shape();
        handle = new Shape();
        addChild(track);
        addChild(thumb);
        createTrack(_width, _height);
        createThumb(_width, thumbHeight);
        enabled = true;
        //mouseChildren = false;
        thumb.mouseChildren = false;
    }
    private function rollOver(evt:MouseEvent):void {
        _over();
    }
    private function rollOut(evt:MouseEvent):void {
        _up();
    }
    private function press(evt:MouseEvent):void {
        _down();
        thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
        stage.addEventListener(MouseEvent.MOUSE_UP, releaseOutside, false, 0, true);
        stage.addEventListener(Event.MOUSE_LEAVE, leave, false, 0, true);
        clickPos = thumb.mouseY;
        stage.addEventListener(MouseEvent.MOUSE_MOVE, drag, false, 0, true);
    }
    private function release(evt:MouseEvent):void {
        _up();
        thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
        stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
        stage.removeEventListener(Event.MOUSE_LEAVE, leave);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
    }
    private function releaseOutside(evt:MouseEvent):void {
        _up();
        thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
        stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
        stage.removeEventListener(Event.MOUSE_LEAVE, leave);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
    }
    private function leave(evt:MouseEvent):void {
        _up();
        thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
        stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
        stage.removeEventListener(Event.MOUSE_LEAVE, leave);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
    }
    private function drag(evt:MouseEvent):void {
        var position:Number = stage.mouseY - clickPos;
        if (position < 0) position = 0;
        if (position > maxHeight) position = maxHeight;
        thumb.y = position;
        scrollTarget();
        evt.updateAfterEvent();
    }
    private function click(evt:MouseEvent):void {
    }
    private function scrollTarget():void {
        var percent:Number = thumb.y/(_height - thumbHeight);
        targetPos = basePos - uint((target.height - rect.height)*percent);
        addEventListener(Event.ENTER_FRAME, slide, false, 0, true);
    }
    private function slide(evt:Event):void {
        target.y += (targetPos - target.y)*deceleration;
        if (Math.abs(targetPos - target.y) < 0.5) {
            target.y = targetPos;
            removeEventListener(Event.ENTER_FRAME, slide);
        }
    }
    private function _up():void {
        base.transform.colorTransform = upColorTrans;
    }
    private function _over():void {
        base.transform.colorTransform = overColorTrans;
    }
    private function _down():void {
        base.transform.colorTransform = overColorTrans;
    }
    private function _off():void {
        base.transform.colorTransform = offColorTrans;
    }
    public function get enabled():Boolean {
        return _enabled;
    }
    public function set enabled(param:Boolean):void {
        _enabled = param;
        thumb.buttonMode = _enabled;
        thumb.mouseEnabled = _enabled;
        thumb.useHandCursor = _enabled;
        track.mouseEnabled = _enabled;
        if (_enabled) {
            _up();
            thumb.addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
            thumb.addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
            thumb.addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
            track.addEventListener(MouseEvent.CLICK, click, false, 0, true);
        } else {
            _off();
            thumb.removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
            thumb.removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
            thumb.removeEventListener(MouseEvent.MOUSE_DOWN, press);
            track.removeEventListener(MouseEvent.CLICK, click);
        }
    }
    private function createThumb(w:uint, h:uint):void {
        thumb.addChild(base);
        thumb.addChild(handle);
        handle.y = uint(h/2);
        base.graphics.beginFill(tColor);
        base.graphics.drawRect(0, 0, w, h);
        base.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, -4, w/2, 1);
        handle.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, -2, w/2, 1);
        handle.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, 0, w/2, 1);
        handle.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, 2, w/2, 1);
        handle.graphics.endFill();
    }
    private function createTrack(w:uint, h:uint):void {
        track.graphics.beginFill(bColor);
        track.graphics.drawRect(0, 0, w, h);
        track.graphics.endFill();
    }

}