JQuery Animate функция. Доступ к новым значениям "top" и "left" - PullRequest
0 голосов
/ 04 июня 2011

Я пытаюсь создать определенный эффект - когда по существу различные элементы перемещаются внутри родительского элемента. Общее намерение состоит в том, чтобы у меня было своего рода движение в стиле PONG, когда элементы сталкиваются с краем родительского объекта и перенаправляют себя. (возможно, даже сталкиваясь друг с другом).

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

$(document).ready(function() {
    $('.collisionmenu li')
    .attr("left", 0).attr("top", 0)
    .attr("xforce", 10).attr("yforce", 10)
    .click(function() {
        //alert($(this).attr("top"));
        if($(this).attr("top") > 50) $(this).attr("yforce", -10);
        $(this).animate({
            left: '+=' + $(this).attr("xforce"),
            top: '+=' + $(this).attr("yforce")
        }, 100);
    });
});

Проблема, с которой я столкнулся, заключается в том, что атрибут top всегда имеет значение «0», несмотря на несколько итераций выполняемой функции «click ()» и видимое движение рассматриваемого элемента.

Я предполагаю, что JQuery не изменяет свойства DOM элементов, когда он анимирует движение и данные о перемещении хранятся где-то еще. Так что мне нужно знать, как я могу узнать обновленную позицию порядка анимированных объектов, чтобы я мог выполнять изменения на основе текущих значений / позиции.

Кроме того, как мы надеемся, это ясно из кода, я занялся настройкой изобретенных свойств "xforce" и "yforce" для каждого элемента, чтобы приспособиться к различным скоростям, когда анимируется более одного элемента. Это приемлемая практика, или я могу столкнуться с проблемами, делая это на более позднем этапе?

Я не уверен, что такого рода вещи уже доступны (поиски ничего не дали), но, честно говоря, меня больше интересует понимание работы, чем фактическое достижение эффекта. Это скорее учебное упражнение.

Большое спасибо и извинения, если это описание не совсем понятно.

Ответы [ 3 ]

1 голос
/ 04 июня 2011

Сверху и слева не атрибуты, они свойства css.

Попробуйте css("left").Также взгляните на http://api.jquery.com/offset/ и http://api.jquery.com/position/

1 голос
/ 04 июня 2011

Проблема в том, что вы проверяете атрибут, который никогда не изменяется. То, что вы действительно хотите, это проверить верхнее значение элемента. Сделайте это с помощью свойства css.

if($(this).css("top") > 50) $(this).attr("yforce", -10);

Предложение * * 1004 Всегда используйте css("top") вместо .attr("top"), потому что вы пытаетесь сделать то же самое. Кроме того, я бы использовал .data("yforce", 10) для хранения ваших значений силы. Для этого нет причин изменять атрибуты элемента.

0 голосов
/ 04 июня 2011

Вы смотрели на http://raphaeljs.com/

Прокрутите вниз и посмотрите на демонстрации. Если я вас правильно понимаю, там есть кто-то, кто делает что-то близкое к тому, чего вы хотите достичь.

...