Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 放大为滚动窗格,但我需要以鼠标位置为中心_Actionscript 3_Actionscript_Zooming_Mousewheel_Scrollpane - Fatal编程技术网

Actionscript 3 放大为滚动窗格,但我需要以鼠标位置为中心

Actionscript 3 放大为滚动窗格,但我需要以鼠标位置为中心,actionscript-3,actionscript,zooming,mousewheel,scrollpane,Actionscript 3,Actionscript,Zooming,Mousewheel,Scrollpane,我在FlashActionScript3中工作。我有一个舞台,有几个选项可以点击。点击每一个按钮将打开一个滚动窗格(全屏1920x1080),其中包含一个图像(图像大小各不相同,但都以1080的高度开始,宽度通常为4000或更多) 我允许用户滚动拖动来平移和查看整个图像。我还添加了缩放功能,在使用鼠标滚轮时,图像将稍微放大和缩小 我的问题是,我需要找到一种方法,使缩放实际上放大鼠标在滚轮移动时移动的位置 我目前只允许缩放到某个级别(放大和缩小) 我已经尝试了一些涉及content.x/y、con

我在FlashActionScript3中工作。我有一个舞台,有几个选项可以点击。点击每一个按钮将打开一个滚动窗格(全屏1920x1080),其中包含一个图像(图像大小各不相同,但都以1080的高度开始,宽度通常为4000或更多)

我允许用户滚动拖动来平移和查看整个图像。我还添加了缩放功能,在使用鼠标滚轮时,图像将稍微放大和缩小

我的问题是,我需要找到一种方法,使缩放实际上放大鼠标在滚轮移动时移动的位置

我目前只允许缩放到某个级别(放大和缩小)

我已经尝试了一些涉及content.x/y、content.width/height、horizontalScrollPosition和maxHorizontalScrollPosition的方法,但我似乎找不到正确的公式来关注正确的区域

我将鼠标滚轮的eventListener添加到我的aSp2滚动窗格中,下面是它触发的函数:

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);
    }


}
MouseWheelEvent(MouseEvent)上的函数:无效{ var mousexps=MouseEvent.stageX; var mouseYPos=MouseEvent.stageY; var imageWidth=aSp2.content.width; 跟踪(“ContentWidth=“+imageWidth+”\n使用X=“+mouseXPos+”\n使用Y=“+mouseYPos”); 如果(MouseEvent.delta>0){ 如果(缩放计数器>0){ 如果(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中心; //跟踪(“MoveRight=“+MoveRight+”\nMoveDown=“+moveDown”); //跟踪(“MaxWidthScroll=“+aSp2.maxHorizontalScrollPosition+”\nMaxHeightScroll=“+aSp2.maxVerticalScrollPosition”); //跟踪(“HScroll=“+aSp2.水平滚动位置”); //跟踪(“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; } } 如果(zoomCounter==5){ aSp2.content.scaleX=1; aSp2.content.scaleY=1; aSp2.content.y=0; aSp2.update(); zoomCounter=4; } 跟踪(“放大计数=”+zoomCounter); }否则{ 如果(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; } 如果(zoomCounter<4){ aSp2.content.scaleX-=1.1; aSp2.content.scaleY-=1.1; aSp2.update(); zoomCounter=zoomCounter+1; } 跟踪(“缩小计数=“+zoomCounter”); } }
您正在寻找的神奇词汇是“Pivot”(在AS3中称为“注册点”)

但这里我们有最快的方法: 你应该把你的图像放在一个容器里

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;
   }
}
函数重新定位():void{
var changex:Number=(container.x-zoomPt.x)/container.scaleX;
变量changey:Number=(container.y-zoomPt.y)/container.scaleX;
container.x=zoomPt.x;
container.y=zoomPt.y;
对于(变量i:int=0;i