Возвращаемое значение
Целое число, полученное парсингом (разбором и интерпретацией) переданной строки. Если первый символ не получилось сконвертировать в число, то возвращается NaN.
// Вот так работает
const decoratedDouble = decorator(double);
console.log(decoratedDouble(5)); // 10
// decoratedDouble это уже другая функция. та, что возвращается из декоратора.
// Просто вы ее перезаписываете в уже существующую переменную.
// А вот так нет
console.log(decorator(double(5))); // [Function (anonymous)]
console.log(
decorator(double)(5) // декоратор возвращает функцию, которую надо вызвать
); // 10
<audio id="music-player" src="/storage/files/music-1.mp3" loop></audio>
<script>
(function () {
const player = document.getElementById('music-player');
if (!player) return;
const toggle = document.getElementById('toggle-music');
if (screen.width < 1220) return;
if (!toggle) return;
let playing = false;
let firstPlay = true;
let iPos;
const KEY_MP_PAUSED = 'music-player-paused';
const KEY_MP_POSITION = 'music-player-position' + player.src;
const startPosition = parseFloat(localStorage.getItem(KEY_MP_POSITION));
const mpPaused = +localStorage.getItem(KEY_MP_PAUSED);
function enablePlay() {
if (firstPlay) {
firstPlay = false;
if (startPosition) player.currentTime = startPosition;
}
player.play();
toggle.classList.add('music-on');
}
function userClick() {
document.removeEventListener('click', userClick);
enablePlay();
}
if (!mpPaused) document.addEventListener('click', userClick);
function updateCurrentPosition() {
localStorage.setItem(KEY_MP_POSITION, player.currentTime.toString());
}
player.addEventListener('play', e => {
playing = true;
localStorage.setItem(KEY_MP_PAUSED, '0');
iPos = setInterval(updateCurrentPosition, 1000);
});
player.addEventListener('pause', e => {
playing = false;
localStorage.setItem(KEY_MP_PAUSED, '1');
clearInterval(iPos);
});
toggle.addEventListener('click', e => {
e.preventDefault();
e.stopPropagation();
document.removeEventListener('click', userClick);
if (playing) {
player.pause();
toggle.classList.remove('music-on');
} else {
enablePlay();
}
});
})();
</script>
gulp.watch('./dist/scss/*.scss'
/dist
/scss
main.scss - отслеживается
/blocks
header.scss - не отслеживается
gulp.watch('./dist/scss/**/*.scss', gulp.series('sass'));
<div class="section">
<div class="container">
<div class="slider">
</div>
</div>
</div>
.section {
overflow: hidden;
}
.container {
width: 1000px;
margin: auto;
padding: 10px 0;
background: green;
}
.slider {
height: 100px;
background:red;
width: calc(50% + 50vw);
}
<meta name="color-scheme" content="only light">
@media (prefers-color-scheme: dark) {
.selector { }
}
const openedCards = cards
.filter(card => card.isActive) // работаем только с активными
.filter(card => card.isOpen) // берем все открытые
if (openedCards.length == 2) { // открыто 2 карточки
if (openedCards[0].text == openedCards[1].text) { // совпали
openedCards.forEach(card => card.hide()); // скрываем
} else { // не совпали
openedCards.forEach(card => card.close()); // переворачиваем обратно
}
}
if (cards.every(card => !card.isActive)) { // Если все скрыты
alert('Game over');
}