正在创建计数器
Creating a counter
我正在创建一个计数器,但我很难制作它。计数器的目标是,每过一秒,数字就会增加170。正如你在下面看到的,这个数字没有加起来,而是在一条新的线上生成的,主要是因为我不知道如何使它加起来。像这个来自《经济学人》的时钟
<!DOCTYPE html>
<html>
<body>
<p>Click the button see how much AirHelps market increases by every second.</p>
<button onclick="counterFunction()">See it now</button>
<p id="counter"></p>
<script>
function counterFunction() {
setTimeout(function () {
var text = "";
var i = 170;
while (i < 3500) {
text += "<br>The number is " + i;
i+=170;
}, 1000) }
document.getElementById("counter").innerHTML = text;
}
</script>
</body>
</html>
关于我如何做到这一点以及我的代码有什么问题,有什么想法吗?
不要使用内联JavaScript(HTML元素属性中的JavaScript),这对可维护性和可读性来说非常糟糕。
你似乎对超时、间隔和循环的工作方式有一个误解,你想要的是一个间隔。
在事件侦听器函数之外定义一个计数变量,然后在间隔的每次迭代中,将计数变量递增一,并将该数字乘以170。
我在里面添加了一点,在点击按钮后隐藏按钮,只是为了阻止用户重新启动计数器。
var clicker = document.getElementById('clicker');
var counter = document.getElementById('counter');
var count = 0;
clicker.onclick = function() {
setInterval(function () {
counter.textContent = "The number is " + ++count * 170;
}, 1000);
clicker.style.display = 'none';
}
<p>Click the button see how much AirHelps market increases by every second.</p>
<button id="clicker">See it now</button>
<p id="counter"></p>
http://jsfiddle.net/mblenton/Le4vxzrn/2/
function counterFunction() {
var text = ""; var i = 170; var delay = 0; var k = 1;
while (i < 3500) {
text = "The number is " + i;
i += 170;
delay = k * 1000;
doSetTimeout(text, delay);
k++;
}
}
function doSetTimeout(text, delay) {
setTimeout(function () {
document.getElementById("counter").textContent = text;
}, delay);
}
您需要使用setInterval
,而不是setTimeout
`。请注意,如果您单击该按钮,它将重置您的计时器。
您还需要在Interval的范围之外声明var i
和var text
,否则它们也将在每次迭代中重置。
您的代码有一些错误。除其他外:
- 您的
i
变量声明在错误的位置以供重用 - 你的右大括号放错了回调函数的位置
- 您使用的是同步运行的
while
循环,而您实际上只想使用setInterval
调用
这应该有效:
function counterFunction() {
var i = 170;
var text = "";
var interval = setInterval(function () {
text += "<br>The number is " + i;
i+=170;
document.getElementById("counter").innerHTML = text;
if (i >= 3500) {
clearInterval(interval);
}
}, 1000);
}
<p>Click the button see how much AirHelps market increases by every second.</p>
<button onclick="counterFunction()">See it now</button>
<p id="counter"></p>
好的,所以加法器变量应该在超时函数之外声明,因为如果不是,则替换该值。你应该使用setInterval
var p =0;
function counterFunction(){
setInterval(function(){ p+=170;
console.log('value of p '+p);
}, 3000);
}
如果你不想自己滚,这里有个不错的柜台http://keith-wood.name/countdown.html
相关文章:
- 如何使用JavaScript创建时间计数器
- 创建新数组或增加计数器
- 使用变量在 jQuery 中创建计数器
- 为遗漏的变量创建计数器
- 如何创建一个计数器循环,该循环在单击提交按钮时启动,并输出多行单词,每个单词前面都有一个数字
- 根据循环中的计数器创建具有唯一名称的 JavaScript 对象
- 如何在Meteor中创建点击计数器(带数据库)
- 正在创建带有计数器的表
- 为facebook游戏创建持久生命计数器
- 如何在 jquery 中创建计数器
- 创建一个计数器以在Yii中添加多个表单
- 使用innerHTML属性创建页面加载计数器
- 创建一个每秒更新一次的计数器
- 正在创建计数器
- 在类创建/追加时增加计数器的值1
- 概念性:在外部函数中创建计数器
- 如何使用jQuery旋钮创建计数器
- 如何防止CouchDB在更新简单计数器时创建文档修订
- 如何创建单击计数器,即使刷新也将数据保存在txt文件中
- 尝试使用Knockout.js创建多个计数器