views:

307

answers:

2

I have a flash cs3 file where I want a mask to move on the y axis (up and down) when the user is scrolling over the navigation area.

In my code, I have:

maskMC.startdrag();

How do I limit the area where the mask will move, then make it return it back to it's original position when the user moves away from the specific area (in this case the navigation).

+2  A: 

1) Limiting mask drag to Y axis:

Just use the startDrag's second argument (bounds:Rectangle).

// startDrag method details
startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void

give it a Rectangle that it should use as its bounds. Details and examples can be found on Adobe's livedocs. For example, to lock dragging to only the Y axis, you should make the width of your Rectangle equal to 0.

var dragBounds:Rectangle = new Rectangle(startX, startY, 0, dragHeight);
myMask.startDrag(false, dragBounds);

2) Return mask to original Y, on drop:

The easiest way is to listen to the mouseup event on the stage. when this fires and you are dragging the mask, then set the mask y to its original location. Personally I would use Tweener to send the mask back, but you can do it how you like (possibly on enterFrame).

public function Main() 
{
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}

private function mouseUpHandler(e:MouseEvent):void 
{
    if (draggingMask)
    {
     Tweener.addTween(myMask, { y:originalY, time:0.5, transition:"easeOutQuad" });
     draggingMask = false;
    }
}

You will need to set draggingMask to true when you start dragging the mask, and to false when you release it. You will also need a variable to store the original location (I used "originalY" in my example above).

TandemAdam
A: 

to use the bounds of the drag, use the following (remembering to import flash.geom.Rectangle;)

startDrag(lockCenter, new Rectangle(leftCornerx, leftCornery, width, height))

if you want it to move back on moving out of the menu object then you want to either use a MouseEvent.ROLL_OUT or MouseEvent.MOUSE_MOVE event listener and test stage.mouseX/stage.mouseY, or run a hitTest. depends on how you have it set up on the stage.

shortstick