我的代码应该制作一组div,其中类以status-淡出开头,然后通过添加10的数字将类从IE status-1更改为status-11。一切都在工作,除了 parseint 正在循环并且类变为状态-179831、状态-179832......
$(function disappear(){
$('[class^="status-"]').delay(5000).fadeOut(400)
$('[class^="status-"]').each(function(){
num = $(this).attr('class').split('status-')[1];
num = parseInt(num, 10) + 10;
$(this).attr("class", "status-"+num+"");
})
$('[class^="status-"]').delay(1000).fadeIn(400)
disappear();
})
要使操作按顺序工作,您需要使用动画的完成函数,如下所示:
$(function (){
function runOne(item) {
item.delay(5000).fadeOut(400, function() {
var num = item.attr('class').split('status-')[1];
num = parseInt(num, 10) + 10;
item.attr("class", "status-"+num+"")
.delay(1000).fadeIn(400, function() {runOne(item)});
});
}
// start all the animations
$('[class^="status-"]').each(function() {
runOne($(this));
});
})
工作演示:http://jsfiddle.net/jfriend00/k7aS7/
编写代码时,这两个动画是异步的,.each()
循环或对disappear()
的下一次调用不会等待动画完成。 使用这样的完成函数会在动画完成后触发序列的下一部分。 您还希望始终确保在局部变量前面使用var
,以避免意外地使它们成为全局变量。
您还可以同步一个 promise 对象,该对象将保证所有动画在每次迭代时始终同时启动:
$(function disappear() {
var all = $('[class^="status-"]');
all.delay(5000).fadeOut(400, function() {
var item = $(this);
var num = item.attr('class').split('status-')[1];
num = parseInt(num, 10) + 10;
item.attr("class", "status-"+num+"")
item.delay(1000).fadeIn(400);
})
// when all animations are done, start the whole process over again
all.promise().done(disappear);
})
此选项的工作演示:http://jsfiddle.net/jfriend00/SY5wr/
要在每次迭代后将类名恢复为原始类名,您可以执行以下操作:
$(function () {
// save original class names
var all = $('[class^="status-"]').each(function() {
$(this).data("origClassName", this.className);
});
function disappear() {
all.delay(5000).fadeOut(400, function() {
var item = $(this);
var num = item.attr('class').split('status-')[1];
num = parseInt(num, 10) + 10;
item.attr("class", "status-"+num+"")
item.delay(1000).fadeIn(400);
})
// when all animations are done, start the whole process over again
all.promise().done(function() {
// restore class names
all.each(function() {
this.className = $(this).data("origClassName");
})
// run it all again
disappear();
});
}
// start it
disappear();
})
工作演示:http://jsfiddle.net/jfriend00/hTmHL/