gpt4 book ai didi

javascript - 使用javascript的计时器

转载 作者:搜寻专家 更新时间:2023-10-31 22:08:49 26 4
gpt4 key购买 nike

我想使用 java 脚本实现计时器。我想通过间隔的变化来减少计时器。
示例。假设我的计时器从 500 开始。
我想要根据级别递减计时器,例如
1. 一级定时器要减1,减速度要慢。
2.2级定时器递减2,递减速度适中
3.3级定时器要递减3,递减速度要快

我可以使用以下代码创建计时器:

<script type="text/javascript">
var Timer;
var TotalSeconds;
function CreateTimer(TimerID, Time)
{
TotalSeconds=Time;
Timer = document.getElementById(TimerID);
TotalSeconds = Time;
UpdateTimer();
setTimeout("Tick()", 1000);
}

function Tick() {
TotalSeconds -= 10;
if (TotalSeconds>=1)
{
UpdateTimer();
setTimeout("Tick()", 1000);
}
else
{
alert(" Time out ");
TotalSeconds=1;
Timer.innerHTML = 1;
}
}

但是我多次调用这个 CreateTimer() 函数,所以它的速度不受控制,因为我多次调用它。

最佳答案

几点:

  1. 您已经使用了所有全局变量,最好将它们设为私有(private),以免其他函数干扰它们
  2. 按照惯例,以大写字母开头的函数名称是为构造函数保留的
  3. 分配给 setTimeout 的函数在运行时没有任何公共(public)变量或函数来修改速度,因此您只能使用全局变量来控制速度。如果您不关心其他人与他们打交道,那没关系,但最好让他们保密
  4. 未包含UpdateTimer的代码
  5. 不是将字符串传递给 setTimeout,而是传递一个函数引用:setTimeout(Tick, 1000);

无论如何,如果您想要一个可以改变速度的简单计时器:

<script>

var timer = (function() {
var basePeriod = 1000;
var currentSpeed = 1;
var timerElement;
var timeoutRef;
var count = 0;

return {
start : function(speed, id) {
if (speed >= 0) {
currentSpeed = speed;
}
if (id) {
timerElement = document.getElementById(id);
}
timer.run();
},

run: function() {
if (timeoutRef) clearInterval(timeoutRef);
if (timerElement) {
timerElement.innerHTML = count;
}
if (currentSpeed) {
timeoutRef = setTimeout(timer.run, basePeriod/currentSpeed);
}
++count;
},

setSpeed: function(speed) {
currentSpeed = +speed;
timer.run();
}
}

}());

window.onload = function(){timer.start(10, 'timer');};

</script>

<div id="timer"></div>
<input id="i0">
<button onclick="
timer.setSpeed(document.getElementById('i0').value);
">Set new speed</button>

它将所有变量保存在闭包中,因此只有函数可以修改它们。您可以通过将速度设置为零来暂停它。

关于javascript - 使用javascript的计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com