使用新的Date()在Javascript中测量时间的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用新的Date()在Javascript中测量时间的问题相关的知识,希望对你有一定的参考价值。
你好,我是javascript编程的初学者。
我想用jquery构建一个简单的游戏,你必须尽可能快地拖放正确的图片。现在的问题是时间测量。我想测量按下开始和结束游戏之间的持续时间(例如正确的牌= 10)。我创建了两个变量(startTime和endTime),我想在代码末尾使用它们来减去它们以获得持续时间。但我不能使用它们。
我究竟做错了什么?我认为如果我在开始时将变量设为全局就足够了。
这是我的代码的重要部分:
var startTime;
var endTime;
function handleCardDrop(event, ui) {
var slotNumber = $(this).data('number');
var cardNumber = ui.draggable.data('number');
if (slotNumber == cardNumber) {
ui.draggable.addClass('correct');
ui.draggable.draggable('disable');
$(this).droppable('disable');
ui.draggable.position({ of: $(this),
my: 'left top',
at: 'left top'
});
ui.draggable.draggable('option', 'revert', false);
correctCards++;
}
if (correctCards == 10) {
var endTime = new Date().getTime();
console.log(endTime);
console.log('Spiel endet');
}
// Only show slot, if the previous one is correct
for (var i = 1; i <= 10; i++) {
if (correctCards == i) {
$('#slot' + [i + 1]).css('display', 'block')
}
}
}
$('#startButton').click(function Ball() {
var startTime = new Date().getTime();
console.log(startTime);
console.log('Spiel beginnt');
$('#ball').animate({
left: '+=800'
}, 20000, "linear");
});
function time() {
var timeDiff = endTime - startTime;
timeDiff /= 1000;
var seconds = Math.round(timeDiff);
console.log(seconds + " seconds");
}
<body>
<div id="content">
<button id="startButton">Start</button>
<div id="cardPile"> </div>
<div id="ball"></div>
<div id="cardSlots"></div>
</div>
答案
您将在各自的函数中重新声明变量endTime
和startTime
,这将创建新的本地范围变量。删除var
声明,您将能够访问全局变量的值。你应该在游戏结束时调用你的time
功能。
var startTime;
var endTime;
function handleCardDrop(event, ui) {
var slotNumber = $(this).data('number');
var cardNumber = ui.draggable.data('number');
if (slotNumber == cardNumber) {
ui.draggable.addClass('correct');
ui.draggable.draggable('disable');
$(this).droppable('disable');
ui.draggable.position({ of: $(this),
my: 'left top',
at: 'left top'
});
ui.draggable.draggable('option', 'revert', false);
correctCards++;
}
if (correctCards == 10) {
endTime = new Date().getTime();
time();
console.log(endTime);
console.log('Spiel endet');
}
// Only show slot, if the previous one is correct
for (var i = 1; i <= 10; i++) {
if (correctCards == i) {
$('#slot' + [i + 1]).css('display', 'block')
}
}
}
$('#startButton').click(function Ball() {
startTime = new Date().getTime();
console.log(startTime);
console.log('Spiel beginnt');
$('#ball').animate({
left: '+=800'
}, 20000, "linear");
});
function time() {
var timeDiff = endTime - startTime;
timeDiff /= 1000;
var seconds = Math.round(timeDiff);
console.log(seconds + " seconds");
}
另一答案
实际上,您在不同的scopes中声明了多个startTime和endTime变量。要继续引用全局变量,请使用var
在文件顶部声明它们一次,然后在没有var
的情况下引用这些全局变量。
要计算差异,您应该在游戏结束时调用time()
函数。
有关更多信息,请查看JavaScript中的scope和var关键字。
另一答案
您正在重新声明“startTime”和“endTime”。在代码片段的第1行和第2行中初始'var'声明之后,只需从这两个中删除变量声明。
以上是关于使用新的Date()在Javascript中测量时间的问题的主要内容,如果未能解决你的问题,请参考以下文章