- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
根据我的代码,当我计数到 60% 时我应该停止,但计数器将继续计数高于 60%。我应该停在 60%,但我却指望永远!我应该怎么做才能解决这个问题?
var i = 0;
function counter(tag_name, precent, varname) {
i++;
$(tag_name).html(i + "%");
if (i == precent) clearInterval(varname);
}
var p1 = setInterval(function () {
counter("#p1", 60, p1);
}, 50);
var p2 = setInterval(function () {
counter("#p2", 60, p2);
}, 50);
var p3 = setInterval(function () {
counter("#p3", 60, p3);
}, 50);
div {
border:solid 1px black;
margin:1px;
width:50px;
height:30p;
float:left;
}
#m1, #m2, #m3 {
width:200px;
height:60px;
float:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="m1">
<div id="b1">d1</div>
<div id="p1">%</div>
</div>
<div id="m2">
<div id="b2">d2</div>
<div id="p2">%</div>
</div>
<div id="m3">
<div id="b3">d3</div>
<div id="p3">%</div>
</div>
最佳答案
这里有几个问题:
clearInterval(varname);
将使用参数 varname
调用 clearInterval
,这是您传入的变量的值在你传递它的时候,而不是在你查看它的时候(因为,比方说,p1
的值被读取然后传递给函数)。虽然您可以通过使用对象的属性并传递属性名称来解决这个问题,但还有更好的方法。
您的所有计数器共享相同的 i
变量,因此至少您不能在 i == precent
处停止,因为只有一个三人将永远看到这一点。它还使计数器奇怪地增加。
它是“百分比”,而不是“百分比”。 :-)
我会使用单独的 i
变量,让 counter
自行管理事物,并且可能使用 setTimeout
链而不是 setInterval
:
function counter(tag_name, percent) {
var i = 0;
run();
function run() {
i++;
$(tag_name).html(i + "%");
if (i < percent) {
setTimeout(run, 50);
}
}
}
counter("#p1", 60);
counter("#p2", 60);
counter("#p3", 60);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
但是如果你想让他们共享i
,你可以使用我之前提到的属性:
var i = 0;
var handles = {};
function counter(tag_name, percent, propname) {
i++;
if (i >= percent) clearInterval(handles[propname]);
if (i <= percent) $(tag_name).html(i + "%");
}
handles.p1 = setInterval(function () {
counter("#p1", 60, "p1");
}, 50);
handles.p2 = setInterval(function () {
counter("#p2", 60, "p2");
}, 50);
handles.p3 = setInterval(function () {
counter("#p3", 60, "p3");
}, 50);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="p1"></p>
<p id="p2"></p>
<p id="p3"></p>
之所以可行,是因为在 JavaScript 中,您可以使用点符号和文字 属性名称 (obj.foo
) 或方括号符号和 来引用属性em>string 属性名称 (obj["foo"]
)。
不过,我倾向于使用第一个示例。
关于javascript - setInterval() 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625979/
这个问题已经有答案了: JavaScript closure inside loops – simple practical example (45 个回答) 已关闭 8 年前。 我试图创建多个 se
这是我的情况,我需要加快函数运行时间,所以 setInterval 不是一个明智的选择,对吧?因为每次至少要花费 4 毫秒。 所以,我可以将 setInterval 函数更改为 requestAnim
我正在尝试下面的代码,看看是否可以将 setInterval Id 存储为关联数组中唯一键的值,然后通过使用唯一值作为键来停止被调用函数中的间隔,如下所示我将 setInterval Id 作为它的值
我花了很长时间试图弄清楚如何使用具有 CSS 样式缓动功能的 Google Maps API 为折线上的符号设置动画。我让它工作 with this Gist和 this Google Maps AP
我是这里的 JS 新手,正在研究一个在给定时间段后开始的倒数计时器。基本上,当用户单击按钮时时钟开始,第二个时钟在第一个计时器用完时开始。我知道“setInterval”是完成这个的最好方法。我面临的
嗨, friend 们,我想只使用一个 setInterval 函数来运行我的代码。目前我正在使用两个 setInterval's 来实现我的目标,我们可以只使用一个 'setInterval' 来获
我的“setInterval”函数有问题,我想在将鼠标悬停在 div 上时启动该函数,但是 setInterval 在我将鼠标悬停在 div 上时第一次起作用=>如果我停留在div,它不会继续改变图片
我想展示两次:一次在你的国家,一次在日本用JS 问题是第二个 setInterval 停止了第一个,我不知道如何进行两次运行。 完整代码 In your region:
好吧,这个问题有几个问题。 首先,我要求 setTimeout() 和 setInterval() 我见过几种不同的调用方式,我想知道哪种方式最适合这种情况。 我正在制作一个 js/canvas 游戏
setInterval(function () { //======= //code //======== if(--timer&etype="; } },1000); 这里定时器结束后,而不是重定
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 5 年前。 Improv
我的前老板有一个 weird bug where when he used setInterval with a long delay interval : setInterval(func, 300
这个问题已经有答案了: How does the "this" keyword work, and when should it be used? (22 个回答) How to access the
我的印象是 setInterval("/*some code*/", time) 相当于 setInterval(function() { /*some code*/ }, time) 显然不是
我对 JavaScript 和 NodeJS 非常陌生,我只是想了解 NodeJS 中的发射器模式。当我尝试使用 setInterval 函数每秒发出一个刻度事件时,程序似乎工作正常:-
我有一个简单的 setTimeout 函数,它在特定时间运行并且工作正常: var now = new Date(); var milliTillExec = new Date(now.getFull
在本教程中,您将借助示例了解 JavaScript setInterval() 方法。 在 JavaScript 中,可以在指定的时间间隔内执行一段代码。这些时间间隔称为定时事件。 有
Js: function cometConnect(){ $.ajax({ cache:false, type:"post", d
LE2。关于如何解决此问题的任何其他想法? 我有这段代码,但不知道为什么不能正常工作: $(function autorun() { if ($("#contactForm").is(":visibl
这个问题在这里已经有了答案: How to make a setInterval stop after some time or after a number of actions? (6 个答案)
我是一名优秀的程序员,十分优秀!