Я работаю во Flash ActionScript 3. У меня есть сцена с несколькими вариантами выбора. Щелчок по каждому из них открывает панель прокрутки (во весь экран 1920x1080) с изображением (изображения различаются по размеру, но все начинаются с высоты 1080, а ширина обычно 4000 и более).
Я разрешаю пользователю использовать scrollDrag для панорамирования и просмотра полного изображения. Я также добавил функцию масштабирования, при которой при использовании колеса прокрутки на мыши изображение будет немного увеличиваться и уменьшаться.
В чем моя проблема, мне нужно найти способ сделать так, чтобы масштабирование действительно увеличивалось в том месте, где находится мышь, когда срабатывает движение колеса.
В настоящее время я позволяю масштабированию происходить только до определенного уровня (вход и выход).
Я пробовал несколько вещей, включая content.x/y, content.width/height, horizontalScrollPosition и maxHorizontalScrollPosition, и я просто не могу найти правильную формулу, чтобы сосредоточиться на нужной области.
Я добавляю прослушиватель событий для колесика мыши в панель прокрутки 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);
}
}