我有以下功能:
$(document).ready(function() {
$('#p').click(function() {
$('#s1').hide();
gameStart(); <-starts timer
$('#s2').show();
});
$('.b4').click(function() {
clearInterval(tI); <-stops the time
});
$('#r').click(function() {
tI = setInterval("setTimer()", 1000); <-not working, should continue the timer again
});
});
当点击div #p
时,它将启动一个带计时器的游戏,这一切都有效。现在,如果我单击div .b4
它将停止/暂停计时器,这也有效。问题是再次启动计时器,从停止计时器继续。
我在点击div tI = setInterval("setTimer()", 1000);
时尝试了#r
,但问题是它会启动计时器,但它不会从停止时开始继续。它将继续,但从它应该是的时间,如果它没有停止/停顿。
那怎么解决这个问题呢?我想暂停时间(想想我有这个部分的权利),然后点击#r
这是我的计时器功能的构建方式:
function gameStart() {
setBlocks();
tM = $('#a1 div.tm');
hS = $('#a1 div.hs');
oT = new Date();
tI = setInterval("setTimer()", 1000);
setHs();
$('.ht').click(hint);
$('.b3').click(reset);
}
//Set timer
function setTimer() {
var n = new Date();
tM.text(getTimeText(n.getTime() - oT.getTime()));
}
//Build timer
function getTimeText(v) {
var vH = Math.floor(v / 3600000);
var vM = Math.floor((v - (vH * 3600000)) / 60000);
var vS = Math.floor((v - (vH * 3600000) - (vM * 60000)) / 1000);
return set2Digit(vH) + ':' + set2Digit(vM) + ':' + set2Digit(vS);
}
function set2Digit(ov) {
var os = '0' + ov;
return os.substr(os.length - 2, 2);
}
- 编辑 -
通过这个html,我有时间展示:<div class="tm">00:00:00</div>
- EDIT2-- 好的,创造了一个新功能。它抓住了暂停的时间,所以从这一点开始,时间应该继续:
$('#r').click(function() {
$('#s1').hide();
tI = setInterval("continueTimer()", 1000); //NEW
$('#s2').show();
});
//Test
function continueTimer() {
divObj = document.getElementById("tm");
tM.text(divObj.innerText);
}
此刻,暂停但暂停此功能的时间暂停...那么如何从这一点开始计时器?我想我很亲近
答案 0 :(得分:2)
这是因为在setTimer
方法中您正在创建一个new Date
对象。因此,每次执行此方法时,都将占用当前时间。如果要继续停止计时器而不是每次都创建new Date
对象,请在计时器启动变量时保持开始日期,然后在setTimer
方法中使用该变量。
修改以下方法并添加全局变量。
var initialTime;
function setTimer() {
tM.text(getTimeText(initialTime.getTime() - oT.getTime()));
initialTime.setMilliseconds(1000);
}
function gameStart() {
setBlocks();
tM = $('#a1 div.tm');
hS = $('#a1 div.hs');
oT = new Date();
initialTime = new Date();
setTimer();
tI = setInterval("setTimer()", 1000);
setHs();
$('.ht').click(hint);
$('.b3').click(reset);
}
答案 1 :(得分:1)
你能在下面试试,
$('#r').click(function() {
oT = new Date(); //this will move the offset date to the resume time..
tI = setInterval(setTimer, 1000);
});