Очередь jQuery специально разработана для анимации и представляет собой объект scope , что означает, что глобальная очередь анимации не предоставлена для удовлетворения ваших требований.
Поскольку вы всегда создаете совершенно новый элемент .msg-div
в методе $.plugin.show
, все эти div сообщений не являются одним и тем же элементом, поэтому вы не можете повторно использовать одну и ту же очередь анимации.
Для вашего требования, Flow-JS может быть лучшим вариантом, включая его, и напишите свой код следующим образом:
$.plugin = {
show: function(str, callback /* 1. add an callback argument */) {
var tmp = '<div class="msg-box">' + str.text + '</div>';
$('body').prepend(tmp);
$('.msg-box').fadeIn(
str.time,
function() {
$(this).delay(str.time).fadeOut(
str.time,
function() {
$(this).remove();
callback(); /* 2. run callback here */
}
);
}
);
}
};
flow.exec(
function() {
$.plugin.show(
{ text: 'abc', time: 4000 },
this /* 3. provide this as callback parameter to $.plugin.show */
);
},
function() {
$.plugin.show(
{ text: 'xyz', time: 1000 },
this /* 3. provide this as callback parameter to $.plugin.show */
);
}
);
Вы должны просто добавить параметр callback
к своему методу $.plugin.show
и выполнить все функции анимации, используя метод flow.exec
, предоставив this
в качестве параметра callback
при вызове метода $.plugin.show
.