有没有办法重构这个 javascript/jquery?
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”的网格的“列”。 r 和 c 可以是任意数字,例如 r=5 c=5
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 have alot of similiar other cases. One way i could think of is to write functions ? i'm not sure i'm still fairly new to the language
im sorry, i is the index of the each() function which is the size of $('.child'), and r and c are just the 'rows' and 'columns' of the grid which contains '.child'.
r and c can be any number, e.g. r=5 c=5
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不使用开关,而是将案例特定数据存储在哈希中。
然后运行主代码块并从哈希中提取任何特定效果类型。
Rather then using a switch, store the case specific data in a hash.
Then run the main block of code and extract anything effect type specific from the hash.
如果不知道 i、r 和 c 是什么,就很难重构。这可以压缩为一个将这些数字作为变量传递的函数 - 因为最终代码的所有其他部分都是相同的。
Without knowing what i, r and c are, it's very hard to refactor. This can be condensed to a function passing those numbers as variables - as ultimately all the other parts of the code are the same.
我认为在每个 case 语句中使用
function
是首先要做的事情。显然,您的功能需要位于交换机之外。
I think using a
function
in each of the case statements would be the first thing to do.Obviously your function would need to be outside of the switch.
我所能建议的就是将实际效果重构为单独的方法,这将使你的 switch 语句更具可读性,即:
或者你可以尝试使用重构函数的
eval
函数:-- -- 编辑 ----
喜欢 Raynos 重构,这也可以合并。
All I could suggest would be to refactor the actual effects into separate methods, this would make your switch statement a bit more readable, i.e.:
Alternatively you could try the
eval
function with the refactored functions thus:---- EDIT ----
Love Raynos refactoring, this could also be incorporated.