我正在使用Flash ActionScript 3.我有一个可以点击几个选项的舞台。单击每个图像将打开一个带有图像的滚动窗格(全屏1920x1080)(图像大小不一,但都从1080的高度开始,宽度通常为4000或更多。
我允许用户使用scrollDrag来平移并查看完整图像。我还添加了一个缩放功能,在鼠标上使用滚轮时,图像会放大和缩小。
我的问题是,我需要找到一种方法来制作它,以便缩放实际放大触发滚轮移动时鼠标的位置。
我目前只让缩放发生在某个级别(进出)。
我尝试了几件涉及content.x / y,content.width / height,horizontalScrollPosition和maxHorizontalScrollPosition的事情,而我似乎无法找到正确的公式来专注于正确的区域。
我将鼠标滚轮的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);
}
}
答案 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