放大AS ScrollPane但我需要以鼠标位置为中心

时间:2014-06-06 14:41:07

标签: actionscript-3 actionscript zoom mousewheel scrollpane

我正在使用Flash ActionScript 3.我有一个可以点击几个选项的舞台。单击每个图像将打开一个带有图像的滚动窗格(全屏1920x1080)(图像大小不一,但都从1080的高度开始,宽度通常为4000或更多。

我允许用户使用scrollDrag来平移并查看完整图像。我还添加了一个缩放功能,在鼠标上使用滚轮时,图像会放大和缩小。

我的问题是,我需要找到一种方法来制作它,以便缩放实际放大触发滚轮移动时鼠标的位置。

我目前只让缩放发生在某个级别(进出)。

我尝试了几件涉及content.x / y,content.width / height,horizo​​ntalScrollPosition和maxHorizo​​ntalScrollPosition的事情,而我似乎无法找到正确的公式来专注于正确的区域。

我将鼠标滚轮的eventListener添加到我的aSp2 Scrollpane中,这是它触发的功能:

function onMouseWheelEvent(MouseEvent):void{
    var mouseXPos = MouseEvent.stageX;
    var mouseYPos = MouseEvent.stageY;

    var imageWidth = aSp2.content.width;

    trace("ContentWidth = "+imageWidth+"\nmouse X = "+mouseXPos+"\nmouse Y = "+mouseYPos);









    if(MouseEvent.delta > 0){
        if(zoomCounter > 0){
            if(zoomCounter != 5){

            //var moveRight = aSp2.horizontalScrollPosition;
            //var moveDown = aSp2.verticalScrollPosition;


            //moveRight = moveRight + aSp2.content.width/2;
            //moveDown = moveDown + aSp2.content.height/2;

            //var centerX;
            //var centerY;


            //trace("MoveRight = "+moveRight+"\nMoveDown = "+moveDown);

            //trace("MaxWidthScroll = "+aSp2.maxHorizontalScrollPosition+"\nMaxHeightScroll = "+aSp2.maxVerticalScrollPosition);

            //trace("HScroll = "+aSp2.horizontalScrollPosition);
            //trace("Content X = "+aSp2.content.x);

            aSp2.content.scaleX += 1.1;
            aSp2.content.scaleY += 1.1;




            //aSp2.horizontalScrollPosition = aSp2.horizontalScrollPosition + aSp2.horizontalScrollPosition/2 ;
            //aSp2.verticalScrollPosition = aSp2.verticalScrollPosition + aSp2.verticalScrollPosition/2;

            aSp2.update();
            zoomCounter = zoomCounter - 1;
            }
        }
        if(zoomCounter == 5){
            aSp2.content.scaleX = 1;
            aSp2.content.scaleY = 1;

            aSp2.content.y = 0;


            aSp2.update();
            zoomCounter = 4;
        }

        trace("Zoom IN Count = "+zoomCounter);
    }else{
        if(zoomCounter == 4){
            scaleAmt = 1920/aSp2.content.width;

            aSp2.content.scaleX = scaleAmt;
            aSp2.content.scaleY = scaleAmt;

            aSp2.content.y = 520-(aSp2.content.height/2);


            aSp2.update();
            zoomCounter = 5;

        }
        if(zoomCounter < 4){

            aSp2.content.scaleX -= 1.1;
            aSp2.content.scaleY -= 1.1;
            aSp2.update();
            zoomCounter = zoomCounter + 1;
        }

        trace("Zoom OUT Count = "+zoomCounter);
    }


}

1 个答案:

答案 0 :(得分:1)

你正在寻找的神奇词是&#34; Pivot&#34; (在AS3中称为&#34;注册点&#34;)。

但是我们有最快的方法: 您应该将图像放在容器Sprite

function reposition():void{
 var changex:Number=(container.x-zoomPt.x)/container.scaleX;
 var changey:Number=(container.y-zoomPt.y)/container.scaleX;
 container.x=zoomPt.x;
 container.y=zoomPt.y;
  for(var i:int=0;i<container.numChildren;i++){
      container.getChildAt(i).x+=changex;
      container.getChildAt(i).y+=changey;
   }
}

完整指南为here