AS3, прокручивайте содержимое, перетаскивая его. Как на телефоне. нет полосы прокрутки. вспышка

Я пытаюсь понять, как прокручивать содержимое в проекте сценария действия, перетаскивая содержимое. Это будет та же функциональность, что и на телефоне, использующая сенсорные жесты для перемещения контента. Я хотел бы сделать это с помощью мыши. Мне не нужна полоса прокрутки. Я хочу перетащить мувиклип с помощью мыши, чтобы прокрутить содержимое мувиклипа.

Есть ли у кого-нибудь какие-либо советы или URL-адреса для меня, чтобы проверить?

спасибо КП


person Cole Peterson    schedule 21.02.2011    source источник


Ответы (3)


На самом деле вы также можете попробовать использовать startDrag здесь.

Startdrag имеет два необязательных параметра: lockcenter (чтобы центрировать мувиклип относительно мыши после перетаскивания), логическое значение и bounds, чтобы определить область, в которую вы можете перетащить его, прямоугольник.

Поэтому, если вы хотите прокручивать по вертикали, используйте прямоугольник соответственно:

movie.startDrag(false, new Rectangle(m.x, -10000, 0, 2 * 10000));

Здесь я написал -10000 как координату y прямоугольника и 2 * 10000 как его высоту. Это сделано для того, чтобы вы могли перетаскивать его, при необходимости измените эти числа.

Небольшой код для перетаскивания выглядит так:

movie.addEventListener("mouseDown", md);

function md(evt:*):void
{
    movie.startDrag(false, new Rectangle(m.x, -10000, 0, 2 * 10000));
    stage.addEventListener("mouseUp", mu);
}

function mu(evt:*):void
{
    movie.stopDrag();
    stage.removeEventListener("mouseUp", mu);
}

Возможно, это соответствует вашим потребностям.

person anemgyenge    schedule 22.04.2011

идея пули:

  • на mouse_down запустить переключатель
  • выйти из переключателя на mouse_up
  • если переключатель включен, заставьте mouse_move обращать внимание на границы перетаскивания
  • если мышь находится выше, правее, левее или ниже границ, пока переключатель активен - не позволяйте мыши больше двигаться, но заставьте область прокрутки двигаться вверх/вниз или влево/вправо.

надеюсь, это поможет / имеет смысл.

person Jacksonkr    schedule 21.02.2011

Вот кое-что, чтобы вы начали. Я работаю над границами сейчас. Несколько минут на это. Это предполагает, что у вас есть мувиклип на сцене, в моем примере это красный прямоугольник (ваше предполагаемое содержимое) с именем экземпляра «box». Эта концепция может быть расширена для прокрутки содержимого внутри контейнера, если хотите.

EDIT имеет неожиданное поведение, когда поле застревает на границах. Эта идея еще не совсем верна, но я думаю, что она на правильном пути. Я все еще возиться с ним. :)

stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, calculatePosition);

var scrolling:Boolean;
var scrollMax = this.stage.stageHeight;

function onDown(evt:MouseEvent = null):void
{
    scrolling = true;
}

function onUp(evt:MouseEvent = null):void
{
    scrolling = false;
}

function calculatePosition(evt:Event)
{
    if(scrolling)
    {
        var percent = getPercentageFromNumber(stage.mouseY, scrollMax, 0);

        var pos = getNumberFromPercentage(percent, scrollMax, 0);

        if(box.y + box.height < scrollMax && box.y > 0)
        {
            box.y = pos;
        }
        else
        {
            onUp();
        }
    }
}

function getPercentageFromNumber(val:Number, max:Number, min:Number = 0):Number
{
    var percent:Number = (val - min) / (max - min) * 100;

    return percent;
}

function getNumberFromPercentage(perc:Number, max:Number, min:Number = 0):Number
{
    var absolute:Number = (perc * (max - min) / 100) + min;

    return absolute;
}
person Ribs    schedule 21.02.2011
comment
Я понял, что хотел, и разместил код здесь. rcolepeterson.posterous.com/scroll-content-by-dragging-it - person Cole Peterson; 22.02.2011
comment
@Cole Peterson Тогда, пожалуйста, добавьте свое решение в качестве ответа (на свой вопрос) и примите его. Может кому в будущем пригодится. - person kapa; 22.04.2011