I have a custom scrollbar with dragger and buttons for left and right movement. I have worked out the logic that lets me scroll my content between its beginning and ending positions. Where I am having trouble is when I scroll about half way then use the buttons to continue the rest of the way till I get to the end or back to the beginning of my content. I am not sure how to calculate where everything is and pick up the movement again on my buttons. I attached a small zip file. I am using flash CS3.
////////////////////////////
// Set variables for scroll bar
var scrollbarWidth:Number = scrollBar_mc.scrollMask.width;
var scrollDraggerWidth:Number = scrollBar_mc.scrollDragger.width;
var maskWidth:Number = scrollBar_mc.scrollMask.width;
var leftBound:Number = scrollBar_mc.scrollMask.x;
var rightBound:Number = scrollBar_mc.scrollMask.width-scrollDraggerWidth;
var startPos:Number = mcHolder.x;
var absNumSet:Number = 0;
var contentWidth:Number = 0;
var scrollAmount:Number = 0;
var newPos:Number = 25;
//set position of dragger on startup
scrollBar_mc.scrollDragger.x = scrollBar_mc.scrollMask.x;
//add event listeners for left and right scroll bar buttons
scrollBar_mc.scrollLeft.addEventListener(MouseEvent.CLICK, moveLeft, false, 0, true);
scrollBar_mc.scrollRight.addEventListener(MouseEvent.CLICK, moveRight, false, 0, true);
//create function to control button movement
function moveLeft(event:MouseEvent):void {
if (mcHolder.x != scrollBar_mc.scrollMask.x) {
mcHolder.x += 559;
scrollBar_mc.scrollDragger.x -= ((scrollBar_mc.scrollMask.width)/12);
}
trace(mcHolder.x);
trace("dragger x: "+scrollBar_mc.scrollDragger.x);
trace("newPos "+newPos);
}
function moveRight(event:MouseEvent):void {
if (mcHolder.x != -(mcHolder.width -(scrollBar_mc.scrollMask.width+25))) {
mcHolder.x -= 559;
scrollBar_mc.scrollDragger.x += ((scrollBar_mc.scrollMask.width)/12);
}
trace(mcHolder.x);
trace("dragger x: "+scrollBar_mc.scrollDragger.x);
trace("newPos "+newPos);
}
//add event listener for drag button
scrollBar_mc.scrollDragger.addEventListener(MouseEvent.MOUSE_DOWN, scrollDraggerPress, false, 0, true);
// When scrollDragger gets pressed we do this
function scrollDraggerPress(event:MouseEvent):void {
trace("I was clicked!");
contentWidth = mcHolder.width;
scrollAmount = (contentWidth-maskWidth)/(scrollbarWidth-scrollDraggerWidth);//11
// Set bounds using some of the scroller BG properties claimed above
var bounds:Rectangle = new Rectangle(leftBound, 60.5, rightBound);
scrollBar_mc.scrollDragger.startDrag(false, bounds);
// Event Listeners
scrollBar_mc.scrollDragger.addEventListener(MouseEvent.MOUSE_MOVE, reportStageMouse, false, 0, true);
scrollBar_mc.scrollDragger.addEventListener(MouseEvent.MOUSE_UP, mouseUpOnStage, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_MOVE, reportStageMouse, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpOnStage, false, 0, true);
function reportStageMouse(event:MouseEvent):void {
absNumSet = Math.abs(scrollBar_mc.scrollMask.x - scrollBar_mc.scrollDragger.x);
mcHolder.x = + Math.round(absNumSet * - 1 * scrollAmount + startPos);
//trace("mcHolder x: "+mcHolder.x);
trace("dragger x: "+scrollBar_mc.scrollDragger.x);
newPos = mcHolder.x;
trace("newPos "+newPos);
}
// When mouse is released while dragging we do this
function mouseUpOnStage(event:MouseEvent):void {
stopDrag();
scrollBar_mc.scrollDragger.removeEventListener(MouseEvent.MOUSE_MOVE, reportStageMouse);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, reportStageMouse);
removeOthersEvents();
}
function removeOthersEvents():void {
scrollBar_mc.scrollDragger.removeEventListener(MouseEvent.MOUSE_UP, mouseUpOnStage);
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpOnStage);
}
}