#javascript #google-chrome #date #firefox #gettime
#javascript #google-chrome #Дата #firefox #gettime
Вопрос:
Итак, у меня возникла эта проблема,
Для функции оценки, которая у меня увеличивается на единицу в секунду, она работает в Google Chrome (версия 53.0.2785.116 m), Microsoft Edge (25.10586.0.0), однако не работает в Firefox (версия 49.0.1). Вероятно, это связано с различиями в формате даты?
Приведенный ниже код — это моя оценка на основе времени в игре canvas. Функция получает дату с начала выполнения и увеличивается на 1 за каждую секунду.
Важно, чтобы оценка начиналась с 0, увеличивалась на 1 в секунду и достигала 100 в браузере.
Ищете какое-либо решение, которое заставит это работать в Firefox — на данный момент «оценка» выглядит статичной и не учитывается в большую сторону, в отличие от Google Chrome и Edge.
Есть идеи? — Новое в JS. Заранее спасибо за вашу помощь.
var start = new Date().getTime(),
score = '0.1';
var interval = window.setInterval(function() {
var time = new Date().getTime() - start;
score = Math.floor(time / 1000);
if(score === 100) {
window.clearInterval(interval);
if(!alert("You win!nPress 'OK' to play again")){
window.location.reload();
}
}
document.getElementById('displayScore').innerHTML = score = '.00 Score';
});
<div id="displayScore"></div>
Комментарии:
1. setInterval принимает два аргумента, вы предоставляете только один.
Ответ №1:
Вам нужно передать задержку в вашем setIntetval, потому что, если вы этого не сделаете, firefox принимает значение по умолчанию 10 (миллисекунд)
задержка Время, в миллисекундах (тысячных долях секунды), таймер должен задерживаться между выполнением указанной функции или кода. Если этот параметр меньше 10, используется значение 10.
Это заставляет его запускаться каждые 10 мс, что является очень низким значением, поэтому, когда вы выполняете вычисления, как score = Math.floor(time / 1000);
результирующее значение приближается к нулю, и ваш var никогда не увеличивается
Комментарии:
1. Спасибо. теперь это работает — изменив значение на «},100);»
2. Круто! если вы хотите больше контролировать значение внутри интервала, вы также можете попробовать изменить здесь
time / 1000);