Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   реализовать toggle события click (https://javascript.ru/forum/misc/54788-realizovat-toggle-sobytiya-click.html)

ivanWantsToKnow 31.03.2015 23:35

реализовать toggle события click
 
При клике на start включается секундомер и меняется значение кнопки на pause. Как сделать, чтобы при повторном нажатии значение кнопки снова менялось на start и секундомер останавливался на текущем значении?

<h2 class='stopwatch'>0</h2>
 <button class='btn-toggle'>Start</button>

var i = 0,
    timer;
document.querySelector('.btn-toggle').addEventListener('click', start, false);

function start() {
  timer = setInterval(increment, 1);
  document.querySelector('.btn-toggle').innerHTML = 'Pause';
  
}

function increment() {
  i++;
  document.querySelector('.stopwatch').innerHTML = i/1000;
}

function stop() {
  clearInterval(timer);
}


Вот для удобства http://jsbin.com/kizavuwoxa/1/edit?html,js,output
Спасибо за ответы, напутствия, направления!

рони 01.04.2015 00:37

ivanWantsToKnow,
<h2 class='stopwatch'>0</h2>
<button class='btn-toggle'>Start</button>

<script>
var i = 0,
    timer,
    n = 1;
document.querySelector('.btn-toggle').addEventListener('click', start, false);

function start() {

    document.querySelector('.btn-toggle').innerHTML = n ? (timer = setInterval(increment, 1), 'Pause') : (stop(), 'Start');
    n ^= 1;
}

function increment() {
    i++;
    document.querySelector('.stopwatch').innerHTML = i / 1000;
}

function stop() {
    clearInterval(timer);
}
</script>

ivanWantsToKnow 01.04.2015 12:10

рони,
Спасибо большое! Только я не вполне понял как получается, что мы записываем timer и строку 'Pause' в innerHTML, но записывается только строка, а таймер отрабатывает так как если бы он был объявлен отдельным statement'ом... Можешь, пожалуйста, прокомментировать это и строку n ^= 1? Решение очень простое и элегантное, но мне не хватает смекалки, чтобы до конца разобраться...

рони 01.04.2015 12:21

Цитата:

Сообщение от ivanWantsToKnow
как получается, что мы записываем timer и строку 'Pause' в innerHTML, но записывается только строка,

http://learn.javascript.ru/operators#оператор-запятая
Цитата:

Сообщение от ivanWantsToKnow
n ^= 1?

генератор 0 1 0 1 false true

ivanWantsToKnow 01.04.2015 14:36

рони,
Спасибо за объяснения, это для меня много прояснило :)


Часовой пояс GMT +3, время: 03:05.