JavaScript, setTimeout

287
22 сентября 2017, 21:48

Код:

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, но не выходит, потому что число уменьшается с шагом в . Как это исправить?

Answer 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/

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

READ ALSO
как определить ширину блока с контентом на любом сайте (для виджета)

как определить ширину блока с контентом на любом сайте (для виджета)

Суть такова, есть самописный виджет, встраивается посредством js в <head>Если на сайте есть стандартный класс container, то все хорошо, а вот если...

240
Особенности регулярок в js?

Особенности регулярок в js?

Нужно провалидировать айпишник с маскойВозвращает true, false, true, false

231