---
id: bd7158d8c442eddfaeb5bd0f
title: Build a Pomodoro Clock
isRequired: true
challengeType: 3
videoUrl: ''
localeTitle: Постройте часы Pomodoro
---

## Description
<section id="description"> <strong>Цель:</strong> создать приложение <a href="https://codepen.io" target="_blank">CodePen.io</a> , функционально подобное этому: <a href="https://codepen.io/freeCodeCamp/full/XpKrrW" target="_blank">https://codepen.io/freeCodeCamp/full/XpKrrW</a> . Выполните приведенные ниже <a href="https://en.wikipedia.org/wiki/User_story" target="_blank">истории пользователей</a> и получите все тесты для прохождения. Дайте ему свой личный стиль. Вы можете использовать любое сочетание HTML, JavaScript, CSS, Bootstrap, SASS, React, Redux и jQuery для завершения этого проекта. Вы должны использовать фреймворк frontend (например, React), потому что этот раздел посвящен изучению интерфейсных фреймворков. Дополнительные технологии, не перечисленные выше, не рекомендуются, и использование их на свой страх и риск. Мы смотрим на поддержку других интерфейсных фреймворков, таких как Angular и Vue, но в настоящее время они не поддерживаются. Мы примем и попытаемся исправить все отчеты о проблемах, которые используют предлагаемый стек технологий для этого проекта. Счастливое кодирование! <strong>User Story # 1:</strong> Я вижу элемент с <code>id=&quot;break-label&quot;</code> который содержит строку (например, &quot;Break Length&quot;). <strong>User Story # 2:</strong> Я вижу элемент с <code>id=&quot;session-label&quot;</code> который содержит строку (например, «Длина сеанса»). <strong>User Story # 3:</strong> Я вижу два интерактивных элемента с соответствующими идентификаторами: <code>id=&quot;break-decrement&quot;</code> и <code>id=&quot;session-decrement&quot;</code> . <strong>User Story # 4:</strong> Я вижу два интерактивных элемента с соответствующими идентификаторами: <code>id=&quot;break-increment&quot;</code> и <code>id=&quot;session-increment&quot;</code> . <strong>User Story # 5:</strong> Я вижу элемент с соответствующим <code>id=&quot;break-length&quot;</code> , который по умолчанию (при загрузке) отображает значение 5. <strong>User Story # 6:</strong> я могу видеть элемент с соответствующим <code>id=&quot;session-length&quot;</code> , который по умолчанию отображает значение 25. <strong>User Story # 7:</strong> я могу увидеть элемент с соответствующим <code>id=&quot;timer-label&quot;</code> , который содержит строку, указывающую, что сеанс инициализирован (например,« Session ») , <strong>User Story # 8:</strong> Я вижу элемент с соответствующим <code>id=&quot;time-left&quot;</code> . ПРИМЕЧАНИЕ. При приостановке или запуске значение в этом поле должно всегда отображаться в формате <code>mm:ss</code> (т.е. 25:00). <strong>User Story # 9:</strong> Я вижу кликабельный элемент с соответствующим <code>id=&quot;start_stop&quot;</code> . <strong>User Story # 10:</strong> Я вижу кликабельный элемент с соответствующим <code>id=&quot;reset&quot;</code> . <strong>User Story # 11:</strong> Когда я нажимаю элемент с идентификатором <code>reset</code> , любой рабочий таймер должен быть остановлен, значение в <code>id=&quot;break-length&quot;</code> должно возвращаться к <code>5</code> , значение в <code>id=&quot;session-length&quot;</code> должно возвращаться до 25, а элемент с <code>id=&quot;time-left&quot;</code> должен сбрасываться в состояние по умолчанию. <strong>User Story # 12:</strong> Когда я нажимаю элемент с идентификатором <code>break-decrement</code> , значение в <code>id=&quot;break-length&quot;</code> уменьшается на значение 1, и я могу видеть обновленное значение. <strong>User Story # 13:</strong> Когда я нажимаю на элемент с идентификатором <code>break-increment</code> , значение в <code>id=&quot;break-length&quot;</code> увеличивается на значение 1, и я могу видеть обновленное значение. <strong>User Story # 14:</strong> Когда я нажимаю элемент с идентификатором сокращения <code>session-decrement</code> , значение в <code>id=&quot;session-length&quot;</code> уменьшается на значение 1, и я могу видеть обновленное значение. <strong>User Story # 15:</strong> Когда я нажимаю элемент с идентификатором <code>session-increment</code> , значение в <code>id=&quot;session-length&quot;</code> увеличивается на значение 1, и я могу видеть обновленное значение. <strong>User Story # 16:</strong> Я не должен был устанавливать длину сеанса или прерывания до &lt;= 0. <strong>User Story # 17:</strong> Я не должен был устанавливать сессию или длину прерывания до 60. <strong>Пользовательская история № 18:</strong> Когда я сначала нажмите элемент с <code>id=&quot;start_stop&quot;</code> , таймер должен начать работать со значения, отображаемого в настоящее время в <code>id=&quot;session-length&quot;</code> , даже если значение было увеличено или уменьшено с первоначального значения 25. <strong>User Story # 19 :</strong> Если таймер запущен, элемент с id <code>time-left</code> должен отображать оставшееся время в формате <code>mm:ss</code> (декрементирование на значение 1 и обновление дисплея каждые 1000 мс). <strong>User Story # 20:</strong> Если таймер запущен, и я нажимаю на элемент с <code>id=&quot;start_stop&quot;</code> , обратный отсчет должен приостанавливаться. <strong>User Story # 21:</strong> Если таймер приостановлен, и я нажимаю на элемент с <code>id=&quot;start_stop&quot;</code> , обратный отсчет должен возобновиться с точки, в которой он был приостановлен. <strong>User Story # 22:</strong> Когда обратный отсчет сеанса достигает нуля (ПРИМЕЧАНИЕ: таймер ДОЛЖЕН достигать 00:00), и начинается новый обратный отсчет, элемент с идентификатором <code>timer-label</code> должен отображать строку, указывающую, что начался перерыв. <strong>User Story # 23:</strong> Когда обратный отсчет сеанса достигнет нуля (ПРИМЕЧАНИЕ: таймер ДОЛЖЕН доходить до 00:00), начинается новый обратный отсчет, отсчитывающий от значения, отображаемого в настоящее время в элементе <code>id=&quot;break-length&quot;</code> . <strong>User Story # 24:</strong> Когда обратный отсчет доходит до нуля (ПРИМЕЧАНИЕ: таймер ДОЛЖЕН достигать 00:00), и начинается новый обратный отсчет, элемент с идентификатором <code>timer-label</code> должен отображать строку, указывающую, что сеанс начался. <strong>User Story # 25:</strong> Когда обратный отсчет доходит до нуля (ПРИМЕЧАНИЕ: таймер ДОЛЖЕН достигать 00:00), должен начинаться отсчет нового сеанса, отсчитывающий от значения, отображаемого в настоящее время в элементе <code>id=&quot;session-length&quot;</code> . <strong>User Story # 26:</strong> Когда обратный отсчет достигает нуля (ПРИМЕЧАНИЕ: таймер ДОЛЖЕН достигать 00:00), должен звучать звук, указывающий, что время вверх. Это следует использовать в HTML5 <code>audio</code> тегов и имеет соответствующий <code>id=&quot;beep&quot;</code> . <strong>User Story # 27:</strong> Звуковой элемент с <code>id=&quot;beep&quot;</code> должен быть 1 секунду или дольше. <strong>User Story # 28:</strong> Звуковой элемент с идентификатором <code>beep</code> должен прекратить воспроизведение и перематываться до начала, когда щелкнут элемент с идентификатором <code>reset</code> . Вы можете создать свой проект, <a href="http://codepen.io/freeCodeCamp/pen/MJjpwO" target="_blank">нажимая эту ручку CodePen</a> . Или вы можете использовать эту ссылку CDN для запуска тестов в любой среде: <code>https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js</code> Как только вы закончите, отправьте URL-адрес своей рабочей проект с прохождением всех его тестов. Не забудьте использовать метод <a href="https://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. </section>

## Instructions
<section id="instructions">
</section>

## Tests
<section id='tests'>

```yml
tests: []

```

</section>

## Challenge Seed
<section id='challengeSeed'>

</section>

## Solution
<section id='solution'>

```js
// solution required
```
</section>
