0

Код:

var first = 0;
var second = 0;
var sub = 0;
function subtractionFunction() {
 document.getElementById('example').innerHTML = "";
 document.getElementById('timerSubtraction').innerHTML = "";
 first = Math.floor(Math.random() * 5);
 second = Math.floor(Math.random() * 5);
 sub = parseInt(first-second);
 document.getElementById('example').innerHTML += first;
 document.getElementById('example').innerHTML += " ";
 document.getElementById('example').innerHTML += '-';
 document.getElementById('example').innerHTML += " ";
 document.getElementById('example').innerHTML += second;
 document.getElementById('timerSubtraction').innerHTML = first + Math.floor(Math.random() * 8);
}
function timerSubtraction() {
 var obj = document.getElementById('timerSubtraction');
 obj.innerHTML--;
 if (obj.innerHTML < sub) {
 return subtractionFunction();
 } else {
 setTimeout(timerSubtraction, 1000);
 }
}
<div onclick="subtractionFunction(); timerSubtraction()"> Click </div>
<div id="example"></div>
<div id="timerSubtraction"></div>

И проблема вот здесь:

if (obj.innerHTML < sub) {return subtractionFunction();} 

Как снова вызвать эти две функции при таком раскладе. Пробовала вызвать subtractionFunction, вызывая в ней при этом timerSubtraction, но не выходит, потому что число уменьшается с шагом в . Как это исправить?

Paulo Berezini
2,2897 золотых знаков25 серебряных знаков34 бронзовых знака
задан 21 сент. 2017 в 12:19
7
  • Вам надо timerSubtraction() вызывать каждую секунду? Commented 21 сент. 2017 в 12:23
  • @Skywave да. Уменьшение числа каждую секунду. Commented 21 сент. 2017 в 12:24
  • можно вынести setTimeout из timerSubtraction и объявить setInterval вне Commented 21 сент. 2017 в 12:25
  • @Skywave, простите, но в setTimeout и setInterval я не очень сильно разбираюсь, но точно знаю, что это две разные функции, так ведь? Разве здесь не подходит только setTimeout? Commented 21 сент. 2017 в 12:28
  • они разные только тем, что setTimeout() выполняет функцию один раз через указанное кол-во времени, а setInterval() выполняет функцию каждые N мс. Commented 21 сент. 2017 в 12:30

1 ответ 1

1

В этом примере можно просто вызывать функцию, отвечающую за таймер, внутри subtractionFunction();

var first = 0;
var second = 0;
var sub = 0;
function subtractionFunction() {
 document.getElementById('example').innerHTML = "";
 document.getElementById('timerSubtraction').innerHTML = "";
 first = Math.floor(Math.random() * 5);
 second = Math.floor(Math.random() * 5);
 sub = parseInt(first - second);
 document.getElementById('example').innerHTML += first;
 document.getElementById('example').innerHTML += " ";
 document.getElementById('example').innerHTML += '-';
 document.getElementById('example').innerHTML += " ";
 document.getElementById('example').innerHTML += second;
 document.getElementById('timerSubtraction').innerHTML = first + Math.floor(Math.random() * 8);
 timerSubtraction();
}
function timerSubtraction() {
 var obj = document.getElementById('timerSubtraction');
 obj.innerHTML--;
 if (obj.innerHTML < sub) {
 return subtractionFunction();
 } else {
 setTimeout(timerSubtraction, 1000);
 }
}

А в диве вызывать только одну функцию:

<div onclick="subtractionFunction(); timerSubtraction()"> Click </div>
<div id="example"></div>
<div id="timerSubtraction"></div>

Вот ссылка на https://jsfiddle.net/1vayrdyg/

Сам пример немного странный, но с его помощью, надеюсь, удалось объяснить что нужно сделать.

ответ дан 21 сент. 2017 в 12:28
1
  • спасибо за ответ, он, в общем-то, подходит, но есть одна проблема: при верном ответе таймер ускоряется. Наглядно это можно увидеть здесь: kurusa.zhecky.net/lesson_11. Commented 22 сент. 2017 в 15:04

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.