Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2015, 23:35
Аватар для ivanWantsToKnow
Интересующийся
Отправить личное сообщение для ivanWantsToKnow Посмотреть профиль Найти все сообщения от ivanWantsToKnow
 
Регистрация: 29.01.2015
Сообщений: 15

реализовать 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
Спасибо за ответы, напутствия, направления!
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2015, 00:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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>
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2015, 12:10
Аватар для ivanWantsToKnow
Интересующийся
Отправить личное сообщение для ivanWantsToKnow Посмотреть профиль Найти все сообщения от ivanWantsToKnow
 
Регистрация: 29.01.2015
Сообщений: 15

рони,
Спасибо большое! Только я не вполне понял как получается, что мы записываем timer и строку 'Pause' в innerHTML, но записывается только строка, а таймер отрабатывает так как если бы он был объявлен отдельным statement'ом... Можешь, пожалуйста, прокомментировать это и строку n ^= 1? Решение очень простое и элегантное, но мне не хватает смекалки, чтобы до конца разобраться...
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2015, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от ivanWantsToKnow
как получается, что мы записываем timer и строку 'Pause' в innerHTML, но записывается только строка,
http://learn.javascript.ru/operators#оператор-запятая
Сообщение от ivanWantsToKnow
n ^= 1?
генератор 0 1 0 1 false true
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2015, 14:36
Аватар для ivanWantsToKnow
Интересующийся
Отправить личное сообщение для ivanWantsToKnow Посмотреть профиль Найти все сообщения от ivanWantsToKnow
 
Регистрация: 29.01.2015
Сообщений: 15

рони,
Спасибо за объяснения, это для меня много прояснило
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События click и dblclick myshara jQuery 1 03.12.2014 17:22
Имитация события click. Это реально ? Lutidza Общие вопросы Javascript 7 17.12.2013 04:41
Запрет события Click на дочернем элементе, кот. находится за рамками родителя Smokvin Events/DOM/Window 11 10.11.2013 01:53
Двойной вызов события click Tmin10 jQuery 3 13.07.2012 22:15
Обработчик события click элемента, содержащего iframe meryfelow Events/DOM/Window 0 07.03.2012 18:58