Read in other languages: Π ΡΡΡΠΊΠΈΠΉ, Π£ΠΊΡΠ°ΡΠ½ΡΡΠΊΠ°, English, EspaΓ±ol, Polski.
- Π‘ΠΎΠ·Π΄Π°Π½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
goit-js-hw-09
. - ΠΡΠΈ ΡΠ΄Π°ΡΠ΅ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΠ°Π±ΠΎΡΡ Π΅ΡΡΡ Π΄Π²Π΅ ΡΡΡΠ»ΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°: Π½Π° ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅
ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΠ°Π±ΠΎΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π½Π°
GitHub Pages
. - ΠΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΆΠΈΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Π·Π°Π΄Π°Π½ΠΈΡ, Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π½Π΅ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.
- ΠΡΠΎΠ΅ΠΊΡ ΡΠΎΠ±ΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ parcel-project-template.
- ΠΠΎΠ΄ ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½
Prettier
.
Π‘ΠΊΠ°ΡΠ°ΠΉ ΡΡΠ°ΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ
Ρ Π³ΠΎΡΠΎΠ²ΠΎΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΎΠΉ, ΡΡΠΈΠ»ΡΠΌΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ
Π·Π°Π΄Π°Π½ΠΈΡ. Π‘ΠΊΠΎΠΏΠΈΡΡΠΉ ΠΈΡ
ΡΠ΅Π±Π΅ Π² ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΏΠ°ΠΏΠΊΡ src
Π²
parcel-project-template.
ΠΡΠΏΠΎΠ»Π½ΡΠΉ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π°Ρ
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)}`;
}
ΠΡΠΏΠΎΠ»Π½ΡΠΉ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π°Ρ
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 Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΡΠΎΡΡΠ±ΡΠ°ΡΠ·Π΅ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ 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.
ΠΡΠΏΠΎΠ»Π½ΡΠΉ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π°Ρ
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.