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