Actionscript 3 - обнаружение щелчка для увеличения или перетаскивания - PullRequest
0 голосов
/ 13 ноября 2009

Я использую Actionscript 3 и создаю программу просмотра изображений. Пока что у меня есть следующие функциональные возможности, основанные на событии мыши onClick:

1) При просмотре изображения нормального размера при нажатии отобразится увеличенное изображение.
2) При просмотре увеличенного изображения при нажатии отобразится «нормальное» изображение.

Отличный материал.

Теперь я хочу применить следующее поведение, чтобы пользователь мог увеличить масштаб и перетащить увеличенное изображение вокруг - и набросал следующее:

1) Удалено событие onClick
2) Добавьте событие «onMouseDown», чтобы записать XY мыши при наведении мыши вниз
3) Добавьте событие «onMouseUp» и запишите XY мыши при наведении мыши вверх
4) Если XY onMouseDown = XY onMouseUp, тогда предположить событие Click - так Zoom
5) Если XY onMouseDown! = XY onMouseUp, то принять событие Drag - поэтому перетащите изображение

Теперь это работает только в том случае, если у пользователя устойчивая рука во время нажатия - и он не чувствует себя отличным решением. Если у пользователя неустойчивая рука, событие перетаскивания предполагается, когда он действительно хочет уменьшить масштаб ...

Может кто-нибудь предложить лучший способ определения, перетаскивать изображение или увеличить изображение, чем я набросал выше?

Спасибо за ваши мысли / помощь,

Старший кокос.

1 Ответ

3 голосов
/ 13 ноября 2009

Ниже приведен базовый псевдокод:

import flash.utils.getTimer;

private var clickTime:uint;

function onMouseDown(event:Event):void {
    this.clickTime = getTimer();

    // Start drag even if they intend to zoom -- it won't hurt if it shifts a
    // couple pixels before zooming out
    startDrag();
}

function onMouseUp(event:Event):void {
    var delta = getTimer() - this.clickTime;

    // It's been less than a quarter second, so user probably meant to zoom
    // in/out.  Adjust this number to taste if it seems too low or high.
    if (delta < 250)
        toggleZoom();

    stopDrag();
}
...