调用setTimeout来减少值
calling setTimeout to decrease value
本文关键字:setTimeout 调用 更新时间:2023-09-26
我创建了一个检查密码强度的工具。结果以0到100之间的数字表示。为了让事情变得更好,我创建了一个setTimeout
函数,使数字像计数器一样逐渐增加或减少。
是jsfiddle
中完整代码的链接您会注意到,当值增加时,函数可以正常工作,但当值减少时则不能。我认为问题出在这段代码中:
function run() {
var i = lastGrade;
setTimeout( function updateProgress() {
x.style.width = i*1.5 + 'px';
s.innerHTML = i + '%';
if(lastGrade <= grade) {
if (i < grade){
setTimeout(updateProgress, 10);
}
i++;
}
else if(lastGrade > grade) {
if (i > grade){
setTimeout(updateProgress, 10);
}
i--;
}
}, 10);
}
问题是您在超时运行之前更新lastGrade
。这实际上同时影响了向上和向下的动画,但在向下的动画中更明显。
一个更实用的例子是:http://jsfiddle.net/MrywR/
然而,你可能想要调整代码,使lastGrade
被用作动画仪表,以防止条反弹。
改变代码:
setTimeout( function updateProgress() {
x.style.width = i*1.5 + 'px';
s.innerHTML = i + '%';
if(lastGrade <= grade) {
if (i < grade){
setTimeout(updateProgress, 10);
} else {
lastGrade = grade;
}
i++;
}
else if(lastGrade > grade) {
if (i > grade){
setTimeout(updateProgress, 10);
} else {
lastGrade = grade;
}
i--;
}
}, 10);
这个版本整体上更好地处理了动画:http://jsfiddle.net/5yeP7/1/
它处理快速键入,删除一些不必要的闭包,并将方法封装为局部变量。
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 在setTimeout中调用相同的函数
- 为什么setTimeout适用于无休止的递归调用
- settimeout调用的函数未结束
- 调用setTimeout内部的函数时发生引用错误
- setTimeout调用自身的任何问题
- 如何将参数传递给使用 setTimeout 调用的函数
- 使用 setTimeout 调用一次 forEach 的回调函数即可完成
- 从setTimeout调用window.event时失败
- 函数(从setTimeout调用)未返回值
- 与连续的setTimeout调用相比,setInterval更有可能按时发生
- setTimeout调用的顺序
- 在setTimeout调用期间超过的最大调用堆栈大小
- 使用setTimeout调用函数,并提供可选的停止方式
- 无用的setTimeout调用(参数周围缺少引号?)
- 为什么这个setTimeout()调用在控制台中工作,而不是作为一个油脂猴子脚本
- 为什么通过setTimeout调用原型函数时会丢失实例信息?
- 如何从匿名函数中对同一函数进行 setTimeout 调用
- 错误:无用的setTimeout调用(参数周围缺少引号?)
- 如何在 setTimeout 调用中解决超出范围的 Var