[ScrollBar Os Native Style v0.1]

var scrollBar:MovieClip = scrollbar_mc;
var scrollBase:MovieClip = scrollBase_mc;
var scrollMask:MovieClip = scrollContentMask_mc;
var scrollContent:MovieClip = scrollContent_mc;

var scrollBarOriginX:Number = scrollBar.x;
var scrollBarOriginY:Number = scrollBar.y;
var scrollContentOriginY:Number = scrollContent.y;

var posY:Number;
var dragRectangle:Rectangle;
var nScrollContentHeight:Number = scrollContent.height;
var nMaskHeight:Number = scrollMask.height;
var nScrollBaseHeight:Number = scrollBase.height;
var nScrollBarHeight:Number;

if (nScrollContentHeight > nMaskHeight){
        scrollBar.visible = true;
        nScrollBarHeight = Math.floor(nScrollBaseHeight * nMaskHeight / nScrollContentHeight);
        scrollBar.height = nScrollBarHeight;
        scrollBar.buttonMode = true;
        scrollBar.addEventListener(MouseEvent.MOUSE_DOWN, scrollBarMouseDownHandler);
        scrollBase.addEventListener(MouseEvent.MOUSE_DOWN, scrollBaseMouseDownHandler);
        stage.addEventListener(Event.ENTER_FRAME, stageEnterFrameHandler);
}else{
        scrollBar.visible = false;
}

function scrollBarMouseDownHandler(evt:MouseEvent):void{
        dragRectangle = new Rectangle(scrollBarOriginX, scrollBarOriginY, 0, nScrollBaseHeight - nScrollBarHeight);
        evt.currentTarget.startDrag(false, dragRectangle);
        stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
}
function stageMouseUpHandler(evt:Event):void {
        scrollBar.stopDrag();
        stage.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler);
}

function scrollBaseMouseDownHandler(evt:MouseEvent):void{
        if(scrollBar.y >= mouseY){
                if(scrollContent.y < scrollContentOriginY){
                        if (nMaskHeight >= -scrollContent.y){
                                posY = scrollContentOriginY;
                        }else{
                                posY = scrollContent.y + nMaskHeight;
                        }
                }
        }
        else if (nScrollContentHeight - nMaskHeight + (scrollContent.y - scrollContentOriginY) - nMaskHeight <= 0){
                posY = scrollContentOriginY - nScrollContentHeight + nMaskHeight;
        }else{
                posY = scrollContent.y - nMaskHeight;
        }
        scrollBar.y = Math.round((scrollContentOriginY - posY) / (nScrollContentHeight - nMaskHeight) * (nScrollBaseHeight - nScrollBarHeight) + scrollBarOriginY);
}

function stageEnterFrameHandler(evt:Event):void{
        posY = Math.round(scrollContentOriginY-(nScrollContentHeight - nMaskHeight) * (scrollBar.y - scrollBarOriginY) / (nScrollBaseHeight - nScrollBarHeight) );
        scrollContent.y += (posY - scrollContent.y) * .4;
}

Laisser un commentaire