使用新的Date()在Javascript中测量时间的问题

问题描述 投票:0回答:3

你好,我是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>
javascript jquery function
3个回答
1
投票

您将在各自的函数中重新声明变量endTimestartTime,这将创建新的本地范围变量。删除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");
}

1
投票

实际上,您在不同的scopes中声明了多个startTime和endTime变量。要继续引用全局变量,请使用var在文件顶部声明它们一次,然后在没有var的情况下引用这些全局变量。

要计算差异,您应该在游戏结束时调用time()函数。

有关更多信息,请查看JavaScript中的scopevar关键字。


0
投票

您正在重新声明“startTime”和“endTime”。在代码片段的第1行和第2行中初始'var'声明之后,只需从这两个中删除变量声明。

© www.soinside.com 2019 - 2024. All rights reserved.