2010-03-22 35 views
0

我正在尝试在图表下方有一个可拖动视口的小地图显示。我基本上是有这个控制图表的视口:在HDividedBox中一次移动多个分隔线

<mx:annotationElements> 
<mx:HDividedBox id="dividedBox" horizontalScrollPolicy="off" width="100%" height="100%" liveDragging="true" borderSides="bottom top"> 
    <mx:Canvas id="leftBox" backgroundColor="#FFFFFF" backgroundAlpha="0.5" width="50%" height="100%" borderColor="#333333" borderThickness="1" borderStyle="solid" borderSides="top right bottom" /> 
    <mx:Canvas id="centerBox" backgroundColor="#FFFFFF" backgroundAlpha="0" width="50%" height="100%" buttonMode="true" minWidth="100" mouseDown="rangeWindowMouseHandler(event);" mouseUp="rangeWindowMouseHandler(event);" mouseMove="rangeWindowMouseHandler(event);" /> 
    <mx:Canvas id="rightBox" backgroundColor="#FFFFFF" backgroundAlpha="0.5" width="0%" height="100%" borderColor="#333333" borderThickness="1" borderStyle="solid" borderSides="top left bottom" /> 
    </mx:HDividedBox> 
</mx:annotationElements> 

使用以下脚本:

private function rangeWindowMouseHandler(event:MouseEvent):void { 
    if(event.target === centerBox) { 
    var coords:Object = rangeDragCoordinates; 

    switch(event.type.toLowerCase()) { 
     case 'mousedown': 
     rangeDrag = true; 
     break; 
     case 'mouseup': 
     rangeDrag = false;  
     break; 
     case 'mousemove':   
     if(rangeDrag) {   
     var xDiff:Number = -(coords.x - event.stageX) * 4.0; 

     for(var i:Number = 0; i < dividedBox.numDividers; i++) {   
     dividedBox.moveDivider(i, xDiff); 
     } 

     } 
     break; 
    } 

    coords.x = event.stageX; 
    coords.y = event.stageY; 
    } 
    } 

问题是,只有一个分隔实际移动在同一时间。我发现,如果我在移动下一个分频器(两个分频器移动)之前设置了大约50ms的超时时间。然而,这似乎是一个相当尴尬的方式来解决这个问题,并且容易出错。

任何人都知道是否可以同时在HDividedBox中移动两个分隔线,还是应该采取另一种方法?

+0

当你说“一次只有一个分配器实际移动”时,你是否意味着在让第一个分配器走后,另一个“追上”? – Robusto 2010-03-22 19:42:37

+0

不,只有一个动作。 – illvm 2010-03-23 18:45:40

回答

1

最终需要使用callLater调用其他分隔器上的更新,而不是立即调用它。