这个JavaScript函数和显示命令示例的更有效版本
More efficient version of this example of javascript function and show commands
我对JS比较陌生,但我了解一些基本原则。但是,这会导致代码效率低下且乏味。
我想知道是否有更有效的版本,本质上就是这个
*
function gz2() {
$('#GZ2').show(500);
setTimeout(gz3, 2000);
}
function gz3() {
$('#GZ3').show(500);
setTimeout(gz4, 2000);
}
function gz4() {
$('#GZ4').show(500);
setTimeout(gz5, 2000);
}
function gz5() {
$('#GZ5').fadeIn(200);
setTimeout(gz6, 1000);
}
function gz6() {
$('#GZ6').fadeIn(200);
setTimeout(gReturn, 2000);
}
function gReturn(){
$('.gammaZ').hide();
setTimeout(gamma1, 0)
}
*
需要明确的是,这些在CSS中都设置为"display:none",并通过JavaScript可见
。是否有代码可以按顺序显示这些元素,而不必单独调用每个元素?特别是如果所有这些的可见性效果(显示、淡入、向下滑动(都相同?就像"所有这些类,以两秒的间隔显示,直到它们都可见">
我问是因为这已经奏效了...现在"很好",但是我最近在我的代码中达到了一个点,以我目前的JavaScript知识,我必须连续做大约40个这样的事情,这不是我觉得舒服的事情,不仅因为它单调,而且因为我相信有一种更简单的方法可以做到这一点,我只是没有得到。
任何帮助不胜感激!
您可以使用回调函数序列
$('#GZ2').show(500, function(){
$('#GZ3').show(500, function(){
$('#GZ4').show(500, function(){
$('#GZ5').fadeIn(200, function(){
$('#GZ6').fadeIn(200, function(){
$('.gammaZ').hide();
});
});
});
});
});
正如@jfriend00在我之前的回答中所说,您可以在回调函数中使用超时函数。
$('#GZ2').show(500, function(){
setTimeout(function(){$('#GZ3').show(500, function(){
setTimeout(function(){$('#GZ4').show(500, function(){
setTimeout(function(){$('#GZ5').fadeIn(200, function(){
setTimeout(function(){$('#GZ6').fadeIn(200, function(){
setTimeout(function(){$('.gammaZ').hide(), 2000};
}, 1000};
}, 2000};
}), 2000};
}), 2000};
});
您可以分解一个接受调用和延迟列表的函数run
:
function run(L) {
var i = 0;
function step() {
L[i][0]();
if (i < L.length-1) {
setTimeout(step, L[i++][1]);
}
}
step();
}
然后你可以像这样使用它:
run([[function(){$('#GZ2').show(500);}, 2000],
[function(){$('#GZ3').show(500);}, 2000],
[function(){$('#GZ4').show(500);}, 2000],
[function(){$('#GZ5').fadeIn(200);}, 1000],
[function(){$('#GZ6').fadeIn(200);}, 2000],
[function(){$('.gammaZ').hide();}, 0],
[gamma1]]);
既然你使用的是jQuery,你可以在show函数上使用闭包,看看它...
$('#gz1').show(500, function() {
$('#gz2').show(2000, function() {
$('#gz3').show(2000, function() {
$('#gz4').show(1000, function() {
$('#gz5').show(1000); //end of the road.
});
});
});
});
https://jsfiddle.net/toxjb9xh/
如果这里的目标是创建一些可重用的代码,你可以用于许多不同的场景,比如(因为你说"我必须连续做大约 40 个这样的"(,那么你通常希望获取重复的代码并将其放入一个可重用的函数中,该函数接受参数,然后向函数传递数据表。
然后,只需向其传递不同的数据表,即可在其他位置重用该逻辑。 这可能是更多的初始代码,但更具可重复性,并且通常可以通过编辑数据表来完成维护,或者可以通过创建一个新的数据表并再次调用 master 函数将该数据传递给它来编码新的用途:
function showNext(selector, method, timing, delay, callback) {
$(selector)[method](timing);
setTimeout(callback, delay);
}
function runItems(list, doneCallback) {
var cntr = 0;
function next() {
var obj;
if (cntr < list.length) {
obj = list[cntr++];
showNext(obj.selector, obj.method, obj.timing, obj.delay, next);
} else {
doneCallback();
}
}
next();
}
var items = [
{selector: '#GZ2', method: 'show', timing: 500, delay: 2000},
{selector: '#GZ3', method: 'show', timing: 500, delay: 2000},
{selector: '#GZ4', method: 'show', timing: 500, delay: 2000},
{selector: '#GZ5', method: 'fadeIn', timing: 200, delay: 1000},
{selector: '#GZ6', method: 'fadeIn', timing: 200, delay: 1000},
{selector: '.gammaZ', method: 'hide', timing: 0, delay: 0},
];
runItems(items, gReturn);
如果为代码中的各种表元素创建默认值,则可以消除表中的某些数据。 例如,可以将默认方法设为'show'
,500
默认计时并2000
默认延迟,然后可以跳过表中作为默认值的所有属性。
- JS编译器/包管理器,用于版本控制
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- Chrome加载旧版本的Javascript文件
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何使用Node.js最有效地解析网页
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- 有效形式-始终只显示1个错误[角度]
- 如何设置jsfiddle's的javascript版本
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 单击仅在第二次单击后有效
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 砌体在移动浏览器(chrome)上不起作用,并且仅在Chrome桌面版本上有效,如果我重新加载(ctrl + f5)页面
- JavaScript 中更有效的 ID 计算器版本
- 为什么许多Jquery动画或效果在Internet Explorer的较低版本中有效
- 这个JavaScript函数和显示命令示例的更有效版本
- 如何有效地使用两个版本的JQuery
- 这个架构在Angular 1.2及以上版本下仍然有效吗?
- 角度ng重复和过滤器错误(版本1.1.5有效,1.2.15有错误)