switch (options.effect) {
case 'h-blinds-fadein':
$('.child').each(function(i) {
$(this).stop().css({
opacity: 0
}).delay(100 * i).animate({
'opacity': 1
}, {
duration: options.speed,
complete: (i !== r * c - 1) ||
function() {
$(this).parent().replaceWith(prev);
options.cp.bind('click', {
effect: options.effect
}, options.ch);
}
});
});
break;
case 'h-blinds-fadein-reverse':
$('.child').each(function(i) {
$(this).stop().css({
opacity: 0
}).delay(100 * (r * c - i)).animate({
'opacity': 1
}, {
duration: options.speed,
complete: (i !== 0) ||
function() {
$(this).parent().replaceWith(prev);
options.cp.bind('click', {
effect: options.effect
}, options.ch);
}
});
});
break;
....more cases
}
我还有很多类似的案例。我能想到的一种方法是编写函数?我不确定我对这门语言还很陌生
抱歉,i是each()函数的索引,它是$('.child')的大小,r和c只是包含'.child'的网格的'行'和'列'。 child '。 r 和 c 可以是任意数字,例如r=5 c=5
最佳答案
不要使用开关,而是将案例特定数据存储在哈希中。
然后运行主代码块并从哈希中提取任何特定效果类型。
function doit(e) {
var hash = {
'h-blinds-fadein': {
delay: function(i) { return i; },
complete: function(i) { return (i !== r * c - 1); }
},
'h-blinds-fadein-reverse': {
delay: function(i) { return (r * c - i); },
complete: function(i) { return i !== 0; }
}
}
$('.child').each(function(i) {
$(this).stop().css({
opacity: 0
}).delay(100 * hash[e].delay(i)).animate({
'opacity': 1
}, {
duration: options.speed,
complete: hash[e].complete(i) ||
function() {
$(this).parent().replaceWith(prev);
options.cp.bind('click', {
effect: options.effect
}, options.ch);
}
});
});
}
doit(options.effect);
关于javascript - 有没有办法重构这个 javascript/jquery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6436753/