Увеличение значения объекта

117
11 мая 2021, 16:20

Есть три кнопки. По нажатию на первую кнопку запускается первый секундомер, по нажатию на вторую останавливается первый и запускается второй секундомер, а по нажатию на третью кнопку останавливается второй секундомер и выводится сумма секунд первого и второго секундомера. Никак не могу понять, почему в консоли выводится 0.

    let button1 = document.getElementById('first'); 
    let button2 = document.getElementById('second'); 
    let button3 = document.getElementById('end'); 
    let time1 = { 
        sec1: 0, 
        timer1: null, 
    }; 
 
    let time2 = { 
        sec2: 0, 
        timer2: null, 
    }; 
 
    function yourTime(time, yourSec, yourTimer) {//функция подсчёта времени 
        function tickTimer() { 
            ++time.yourSec; 
        } 
 
        time.yourTimer = setInterval(tickTimer, 1000); 
    } 
    button1.addEventListener('click', function () { 
        yourTime(time1, time1.sec1, time1.timer1); 
        console.log('первая запись пошла'); 
    }); 
    button2.addEventListener('click', function () { 
        clearInterval(time1.timer1); 
        yourTime(time2, time2.sec2, time2.timer2); 
        console.log('остановка первой, вторая запись пошла'); 
    }); 
    button3.addEventListener('click', function () { 
        clearInterval(time2.timer2); 
        let sec = time1.sec1 + time2.sec2; 
        console.log('результат:'+sec); 
    });
<button id="first">1</button> 
<button id="second">2</button> 
<button id="end">3</button>

Answer 1

В исправленных местах добавлены комментарии:

let button1 = document.getElementById('first'); 
let button2 = document.getElementById('second'); 
let button3 = document.getElementById('end'); 
let time1 = { 
  sec1: 0, 
  timer1: null, 
}; 
 
let time2 = { 
  sec2: 0, 
  timer2: null, 
}; 
 
function yourTime(time, yourSec, yourTimer) { 
  function tickTimer() { 
    ++time[yourSec];  
    // если ключ является переменной, запись с точкой не прокатит - нужны [скобки] 
  } 
  time[yourTimer] = setInterval(tickTimer, 1000); 
} 
button1.addEventListener('click', function () { 
  yourTime(time1, 'sec1', 'timer1');  
  // В качесвтве параметров - сами ключи в виде строк, а не ЗНАЧЕНИЕ ключа time1.sec1 
  console.log('первая запись пошла'); 
}); 
button2.addEventListener('click', function () { 
  clearInterval(time1.timer1); 
  yourTime(time2, 'sec2', 'timer2'); 
  console.log('остановка первой, вторая запись пошла'); 
}); 
button3.addEventListener('click', function () { 
  clearInterval(time2.timer2); 
  let sec = time1.sec1 + time2.sec2; 
  console.log('результат:'+sec); 
});
<button id="first">1</button> 
<button id="second">2</button> 
<button id="end">3</button>

P.s. могут быть интересные сюрпризы, если не использовать getElementById или querySelector('#')... т.к. в таком случае создается глобальная переменная с таким названием))

READ ALSO
При обращении к массиву по индексу &ldquo;undefined&rdquo;

При обращении к массиву по индексу “undefined”

Создаю массив из массивов данных полученного из CSV файлаПри обращении к конкретному массиву по индексу выводит "undefined"

90
setState сохраняет значение со второго раза

setState сохраняет значение со второго раза

На странице реализована возможность сохранения настроекНа форме присутствует 3 поля

123
Route не рендерит компонент. У Двух компонентов одинаковый путь но Route рендерит только один компонент

Route не рендерит компонент. У Двух компонентов одинаковый путь но Route рендерит только один компонент

Есть два компонента и нужно чтобы они оба рендерились по одному путиКомпонент PostWrap будет меняться а компонент People будет меняться редко

109
Post запрос axios vue js

Post запрос axios vue js

Хочу отправить значение data_state = false на сервер после клика на картинкуКод скрипта:

103