Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Удаление элемента после анимации. (https://javascript.ru/forum/jquery/51003-udalenie-ehlementa-posle-animacii.html)

Siend 20.10.2014 17:19

Удаление элемента после анимации.
 
Такая проблема, после анимации нужно удалить элемент. Именно удалить, а не спрятать.

Вот такой код:
$("#M"+i).animate( { top: (y-25)+"px", bot: (x-25)+"px"}, 300).remove();
Удаляет элемент сразу же, не дожидаясь конца анимации.

Вот такой код:
$("#M"+i).animate( { top: (y-25)+"px", bot: (x-25)+"px"}, 300, function() {$("#M"+i).remove();});
Вообще ничего не удаляет.

Подскажите плиз решение)

рони 20.10.2014 17:36

Цитата:

Сообщение от Siend
$("#M"+i).animate( { top: (y-25)+"px", bot: (x-25)+"px"}, 300, function() {$("#M"+i).remove();});

$(this).remove()

Siend 20.10.2014 17:40

УРА! Заработало!!!) а я мучался) спасибо большое) Хотя я и не понял почему прямое обращение к элементу не дало такого же результата)

Siend 20.10.2014 17:49

рони,
Еще такой вопрос:

$("#M"+i).animate( { top:(y-25)+"px", bot:(x-25)+"px"}, 300, function() {this.remove();});

код код код

Анимация 2.

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

рони 20.10.2014 17:52

Цитата:

Сообщение от Siend
Хотя я и не понял почему прямое обращение к элементу не дало такого же результата)

$("#M"+i).remove(); где взять i и какое значение будет у i когда будет вызов колбек.

рони 20.10.2014 17:54

Цитата:

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

непонял

Siend 20.10.2014 18:00

Вообщем я кажется запутался в свойстве queue.

Вот первая анимация:

$("#M"+i).animate( { top: (y-25)+"px", bot: (x-25)+"px"},300, function() {this.remove();});

а вот что после нее происходит далее:

$("#M"+i).animate( { top: (y-25)+"px" }, { queue:true, duration:300 } ).animate( { bot: (x-25)+"px" }, { queue:false, duration:300 } );

Но даже если я меняю на true все равно все работает криво. Я уже понял что скрипт выполняется дальше не зависимо от анимации, и походу в этом и есть мой косяк. Я удаляю элементы потому что потом будет пересоздаваться элемент с таким же именем, и видимо он просто не успевает удалится. Вообщем думаю решение такое:
var rdy=false;
$("#M"+i).animate( { top: (y-25)+"px", bot: (x-25)+"px"},300, function() {this.remove(); rdy=true;});

while(!rdy){}

и дальше уже все остальное.

Siend 20.10.2014 18:09

рони,
Не помогло. Попытался сделать так:

rdyCurMenu = 0;
rdyFullMenu = ceMenu;
for (var i = 0; i < ceMenu; i++) {
var angle = (Math.PI * 2 / ceMenu) * i;
var x = xMenu;
var y = yMenu;
$("#M"+i).animate( { top:(y-25)+"px", bot:(x-25)+"px"},300, function() {this.remove();rdyCurMenu++});
}	
while(!rdyMenu){if(rdyCurMenu==rdyFullMenu)rdyMenu=true;}


Вообще все зависло(

рони 20.10.2014 18:14

this.remove(); разве работает?
вроде $(this).remove()

Siend 20.10.2014 18:17

this.remove() почему то работает))) но мой while тупо останавливает выполнение всего, даже анимации которая вообщем то по сути не должна останавливаться( сейчас пробую другую реализацию.


Часовой пояс GMT +3, время: 17:40.