Задача №18
Користувач може змінювати колір фону, що вибирає користувач з використанням
<input type="color">.
Зберігати цей колір і відновлювати при наступному відкритті. Також зберігати і відображати кількість змін протягом одного сеансу.
Рішення:
Кількість змін: 0
'use strict'
const STORAGE_KEYS = {
backgroundColor: 'backgroundColor',
backgroundColorChange: 'backgroundColorChange',
}
/**
* @param {string} color
*/
function setBackgroundColor(color) {
document.body.style.backgroundColor = color
localStorage.setItem(STORAGE_KEYS.backgroundColor, color)
}
function incrementColorChangeCounter() {
const storageChangeAmount =
sessionStorage.getItem(STORAGE_KEYS.backgroundColorChange) ?? '0'
const incrementedChangeAmount = Number(storageChangeAmount) + 1
sessionStorage.setItem(
STORAGE_KEYS.backgroundColorChange,
String(incrementedChangeAmount),
)
const counterEl = document.querySelector('.js-color-counter')
counterEl.textContent = String(incrementedChangeAmount)
}
/** @param {Event} e */
function handleInputColorChange(e) {
const color = e.currentTarget.value ?? ''
setBackgroundColor(color)
incrementColorChangeCounter()
}
function setBackgroundColorFromLocalStorage() {
const color = localStorage.getItem(STORAGE_KEYS.backgroundColor) ?? ''
document.body.style.backgroundColor = color
}
/** @param {StorageEvent} e */
function handleStorageEventForBackgroundColor(e) {
if (e.key !== STORAGE_KEYS.backgroundColor) return
setBackgroundColorFromLocalStorage()
}
function initColorStats() {
const counterEl = document.querySelector('.js-color-counter')
counterEl.textContent =
sessionStorage.getItem(STORAGE_KEYS.backgroundColorChange) ?? '0'
}
// =============================================================================
window.addEventListener('storage', handleStorageEventForBackgroundColor)
setBackgroundColorFromLocalStorage()
const colorInputEl = document.querySelector('.js-color-input')
colorInputEl?.addEventListener('input', handleInputColorChange)
initColorStats()
