8000 GitHub - labattaria/goit-js-10: πŸ“š JS-10 | Promises, async, event loop
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

labattaria/goit-js-10

Repository files navigation

Read in other languages: Русский, Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ°, English, EspaΓ±ol, Polski.

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°

  • Π‘ΠΎΠ·Π΄Π°Π½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ goit-js-hw-09.
  • ΠŸΡ€ΠΈ сдачС домашнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ссылки для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: Π½Π° исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ страницу Π½Π° GitHub Pages.
  • ΠŸΡ€ΠΈ посСщСнии ΠΆΠΈΠ²ΠΎΠΉ страницы задания, Π² консоли Π½Π΅Ρ‚Ρƒ ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ собран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ parcel-project-template.
  • Код ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Prettier.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π‘ΠΊΠ°Ρ‡Π°ΠΉ стартовыС Ρ„Π°ΠΉΠ»Ρ‹ с Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ, стилями ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ скриптов для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ задания. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉ ΠΈΡ… сСбС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΏΠ°ΠΏΠΊΡƒ src Π² parcel-project-template.

Π—Π°Π΄Π°Π½ΠΈΠ΅ 1 - ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²

Выполняй это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… 01-color-switcher.html ΠΈ 01-color-switcher.js. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ.

color-switcher-demo.mp4

Π’ HTML Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«StartΒ» ΠΈ Β«StopΒ».

<button type="button" data-start>Start</button>
<button type="button" data-stop>Stop</button>

Напиши скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«StartΒ», Ρ€Π°Π· Π² сСкунду мСняСт Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° <body> Π½Π° случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½Π»Π°ΠΉΠ½ ΡΡ‚ΠΈΠ»ΡŒ. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StopΒ», ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

⚠️ Π£Ρ‡Ρ‚ΠΈ, Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StartΒ» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ бСсконСчноС количСство Ρ€Π°Π·. Π‘Π΄Π΅Π»Π°ΠΉ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ Π·Π°ΠΏΡƒΡˆΠ΅Π½ΠΎ, ΠΊΠ½ΠΎΠΏΠΊΠ° Β«StartΒ» Π±Ρ‹Π»Π° Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Π° (disabled).

Для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайного Ρ†Π²Π΅Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getRandomHexColor.

function getRandomHexColor() {
  return `#${Math.floor(Math.random() * 16777215).toString(16).padStart(6, 0)}`;
}

Π—Π°Π΄Π°Π½ΠΈΠ΅ 2 - Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ отсчСта

Выполняй это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… 02-timer.html ΠΈ 02-timer.js. Напиши скрипт Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Ρ‘Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹. Π’Π°ΠΊΠΎΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±Π»ΠΎΠ³Π°Ρ… ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°Ρ…, страницах рСгистрации событий, Π²ΠΎ врСмя тСхничСского обслуТивания ΠΈ Ρ‚. Π΄. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

countdown-timer-demo.mp4

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ интСфрСйса

Π’ HTML Π΅ΡΡ‚ΡŒ готовая Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, поля Π²Ρ‹Π±ΠΎΡ€Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ. Π”ΠΎΠ±Π°Π²ΡŒ минимальноС ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ элСмСнтов интСрфСйса.

<input type="text" id="datetime-picker" />
<button type="button" data-start>Start</button>

<div class="timer">
  <div class="field">
    <span class="value" data-days>00</span>
    <span class="label">Days</span>
  </div>
  <div class="field">
    <span class="value" data-hours>00</span>
    <span class="label">Hours</span>
  </div>
  <div class="field">
    <span class="value" data-minutes>00</span>
    <span class="label">Minutes</span>
  </div>
  <div class="field">
    <span class="value" data-seconds>00</span>
    <span class="label">Seconds</span>
  </div>
</div>

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° flatpickr

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ flatpickr для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ кроссбраузСрно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя Π² ΠΎΠ΄Π½ΠΎΠΌ элСмСнтС интСрфСйса. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ CSS ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠΌΠΏΠΎΡ€Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

// Описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
import flatpickr from 'flatpickr';
// Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ стилСй
import 'flatpickr/dist/flatpickr.min.css';

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Π΅Ρ‘ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π½Π° элСмСнтС input[type="text"], поэтому ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»Π΅ input#datetime-picker.

<input type="text" id="datetime-picker" />

Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ flatpickr(selector, options) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠœΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для тСбя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для выполнСния задания. Π Π°Π·Π±Π΅Ρ€ΠΈΡΡŒ Π·Π° Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ свойство Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Β«OptionsΒ» ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π΅Π³ΠΎ Π² своСм ΠΊΠΎΠ΄Π΅.

const options = {
  enableTime: true,
  time_24hr: true,
  defaultDate: new Date(),
  minuteIncrement: 1,
  onClose(selectedDates) {
    console.log(selectedDates[0]);
  },
};

Π’Ρ‹Π±ΠΎΡ€ Π΄Π°Ρ‚Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄ onClose() ΠΈΠ· ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ элСмСнта интСрфСйса ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт flatpickr. ИмСнно Π² Π½Ρ‘ΠΌ стоит ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ selectedDates это массив Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Π΄Π°Ρ‚, поэтому ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт.

  • Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» Π΄Π°Ρ‚Ρƒ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ, ΠΏΠΎΠΊΠ°ΠΆΠΈ window.alert() с тСкстом "Please choose a date in the future".
  • Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» Π²Π°Π»ΠΈΠ΄Π½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ (Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ), ΠΊΠ½ΠΎΠΏΠΊΠ° Β«StartΒ» становится Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ.
  • Кнопка Β«StartΒ» Π΄ΠΎΠ»ΠΆΠ° Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π» Π΄Π°Ρ‚Ρƒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.
  • ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StartΒ» начинаСтся отсчСт Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° наТатия.

ΠžΡ‚ΡΡ‡Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«StartΒ» скрипт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ€Π°Π· Π² сСкунду сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ интСрфСйс Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, показывая Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹: Π΄Π½ΠΈ, часы, ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΠΈ сСкунды Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ xx:xx:xx:xx.

  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π΄Π½Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΡƒΡ… Ρ†ΠΈΡ„Ρ€.
  • Π’Π°ΠΉΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ³Π΄Π° дошСл Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 00:00:00:00.

πŸ’‘ НС Π±ΡƒΠ΄Π΅ΠΌ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ. Если Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ - Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ страницу.

Для подсчСта Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ convertMs, Π³Π΄Π΅ ms - Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚ΠΎΠΉ Π² миллисСкундах.

function convertMs(ms) {
  // Number of milliseconds per unit of time
  const second = 1000;
  const minute = second * 60;
  const hour = minute * 60;
  const day = hour * 24;

  // Remaining days
  const days = Math.floor(ms / day);
  // Remaining hours
  const hours = Math.floor((ms % day) / hour);
  // Remaining minutes
  const minutes = Math.floor(((ms % day) % hour) / minute);
  // Remaining seconds
  const seconds = Math.floor((((ms % day) % hour) % minute) / second);

  return { days, hours, minutes, seconds };
}

console.log(convertMs(2000)); // {days: 0, hours: 0, minutes: 0, seconds: 2}
console.log(convertMs(140000)); // {days: 0, hours: 0, minutes: 2, seconds: 20}
console.log(convertMs(24140000)); // {days: 0, hours: 6 minutes: 42, seconds: 20}

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Ѐункция convertMs() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с рассчитанным ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΡΡ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π΄Π°Ρ‚Ρ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ 4 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ функция Π²Π΅Ρ€Π½Π΅Ρ‚ 4, Π° Π½Π΅ 04. Π’ интСрфСйсС Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ 0 Ссли Π² числС мСньшС Π΄Π²ΡƒΡ… символов. Напиши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ addLeadingZero(value), которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ padStart() ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ отрисовкой интСфрСйса Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ

⚠️ Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π΅ обязатСлСн ΠΏΡ€ΠΈ сдачС задания, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ.

Для отобраТСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ вмСсто window.alert() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ notiflix.

Π—Π°Π΄Π°Π½ΠΈΠ΅ 3 - Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ промисов

Выполняй это Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… 03-promises.html ΠΈ 03-promises.js. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° промисов.

promise-generator-demo.mp4

Π’ HTML Π΅ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡ‹, Π² поля ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² миллисСкундах, шаг увСличСния Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ промиса послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ количСство промисов ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.

<form class="form">
  <label>
    First delay (ms)
    <input type="number" name="delay" required />
  </label>
  <label>
    Delay step (ms)
    <input type="number" name="step" required />
  </label>
  <label>
    Amount
    <input type="number" name="amount" required />
  </label>
  <button type="submit">Create promises</button>
</form>

Напиши скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ сабмитС Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ createPromise(position, delay) ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько Π²Π²Π΅Π»ΠΈ Π² ΠΏΠΎΠ»Π΅ amount. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉ Π΅ΠΉ Π½ΠΎΠΌΠ΅Ρ€ создаваСмого промиса (position) ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ учитывая Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ (delay) ΠΈ шаг (step).

function createPromise(position, delay) {
  const shouldResolve = Math.random() > 0.3;
  if (shouldResolve) {
    // Fulfill
  } else {
    // Reject
  }
}

Π”ΠΎΠΏΠΎΠ»Π½ΠΈ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ createPromise Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° ΠΎΠ΄ΠΈΠ½ промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполянСтся ΠΈΠ»ΠΈ отклоняСтся Ρ‡Π΅Ρ€Π΅Π· delay Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ промиса Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ свойства position ΠΈ delay со значСниями ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с промисом - Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ.

createPromise(2, 1500)
  .then(({ position, delay }) => {
    console.log(`βœ… Fulfilled promise ${position} in ${delay}ms`);
  })
  .catch(({ position, delay }) => {
    console.log(`❌ Rejected promise ${position} in ${delay}ms`);
  });

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ

⚠️ Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π΅ обязатСлСн ΠΏΡ€ΠΈ сдачС задания, Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ.

Для отобраТСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ вмСсто console.log() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ notiflix.

About

πŸ“š JS-10 | Promises, async, event loop

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0