2010-08-10 53 views
0

我正在制作自定义滑块组件。头(您拖动的东西)编程这样的:检测鼠标移动并释放锁定的可拖动对象

 head.addEventListener(MouseEvent.MOUSE_DOWN, function():void { 
      head.startDrag(false, new Rectangle(stubDiv,0,width - stubDiv - ((levels-maxLevel)*stubDiv),0)); 
     }); 
     head.addEventListener(MouseEvent.MOUSE_MOVE, function():void { 
      updateLevel(); 
     }); 
     head.addEventListener(MouseEvent.MOUSE_UP, function():void { 
      head.stopDrag(); 
      setHeadPos(); 
     }); 

因为头部被限制在滚动条的面积,鼠标可以移动远离它。如果发生这种情况,该对象仍在被拖动,但它不会收到MOUSE_MOVE事件,如果鼠标被释放,则不会收到MOUSE_UP事件。

什么是最好的解决方案?

回答

0

在AS3中,这是处理加入的MouseEvent侦听到舞台监听MOUSE_UP事件。你可以看到,作为一种风格,我避免在我的事件监听器中使用匿名函数。这在大多数情况下允许更多的灵活性,并且在我看来,阅读起来要容易得多。

至于你的其他问题,不具有“滚动柄”反应MOUSE_MOVE事件...你想让它你已经推出远离手柄即使仍然会有什么反应?取决于你希望如何工作,可以通过多种方式完成。

请详细说明您正在寻找什么行为。

1

而是在头部的MOUSE_MOVE事件调用updateLevel(),把它的头部的ENTER_FRAME事件:

head.addEventListener(MouseEvent.MOUSE_DOWN, function():void { 
    head.startDrag(false, new Rectangle(stubDiv,0,width - stubDiv - ((levels-maxLevel)*stubDiv),0)); 
    head.addEventListener(Event.ENTER_FRAME, function():void { updateLevel(); }); 
}); 

head.addEventListener(MouseEvent.MOUSE_UP, function():void { 
    head.stopDrag(); 
    head.removeEventListener(Event.ENTER_FRAME, function():void { updateLevel(); }); 
    setHeadPos(); 
}); 

head.Stage.addEventListener(Event.MOUSE_LEAVE, function():void { 
    head.stopDrag(); 
    head.removeEventListener(Event.ENTER_FRAME, function():void { updateLevel(); }); 
    setHeadPos(); 
}); 

我曾在一个类似的功能之前,我还需要处理阶段的MOUSE_LEAVE。根据您的要求,您可能还需要添加的MouseEvent.MOUSE_OUT头