JavaScript30 - 01 - JavaScript Drum Kit
При нажатии на клавишу на клавиатуре появляется звук, соответствующий данной клавише, и небольшая анимация, прописанная в css-правиле:
.playing {
transform: scale(1.1);
border-color: #ffc600;
box-shadow: 0 0 1rem #ffc600;
}
Добавлению элементу key класса playing соответствует строка в js:
key.classList.add('playing');
Нам нужно связать нажатие клавиши клавиатуры с нашим html-кодом и проигрыванием определённого звука. Коды клавиш можно увидеть на этом сайте: http://keycod.es/ Нажмите любую клавишу, и увидите её код. Например, для буквы "А" (лат.) код клавиши 65.
Прописываем в html код:
I часть:
<div data-key="65" class="key"> A
<span class="sound">clap</span>
</div>
II часть:
<audio data-key="65" src="sounds/clap.wav"></audio>
В первой части кода ключ key="65" связал клавишу "А" с html кодом, во второй - привязал к ней звук, хранящийся по адресу src="sounds/clap.wav".
Подробнее об атрибуте data-* можно прочитать по ссылке: https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Using_data_attributes Оттуда выясним, что на IE ниже 11 версии данный атрибут не поддерживается, а это означает, что данный сайт в этом браузере работать не будет.
Попробуем разобраться с js-кодом.
function removeTransition(e) {
if (e.propertyName !== 'transform') return;
e.target.classList.remove('playing');
}
Функция принимает аргумент е - вероятно это и есть один из div в html-коде, проверяет есть ли у него css-свойство transform и, если свойства нет, прекращает работу, а если свойство есть, убирает класс playing, в котором это свойство прописано.
Доступ к свойству элемента позволяет получить через
Непонятно, почему проверяется именно наличие свойства, а не класса при помощи
Здесь объяснение что это и зачем. Мы пытаемся вместо того, чтобы назначать обработчик событий для каждой кнопки отдельно, сделать единый обработчик для всех. При этом
Правда, разобраться с этим вовсе не так просто. Похоже, вариант "одно задание за один день" не для меня.
.playing {
transform: scale(1.1);
border-color: #ffc600;
box-shadow: 0 0 1rem #ffc600;
}
Добавлению элементу key класса playing соответствует строка в js:
key.classList.add('playing');
Нам нужно связать нажатие клавиши клавиатуры с нашим html-кодом и проигрыванием определённого звука. Коды клавиш можно увидеть на этом сайте: http://keycod.es/ Нажмите любую клавишу, и увидите её код. Например, для буквы "А" (лат.) код клавиши 65.
Прописываем в html код:
I часть:
<div data-key="65" class="key"> A
<span class="sound">clap</span>
</div>
II часть:
<audio data-key="65" src="sounds/clap.wav"></audio>
В первой части кода ключ key="65" связал клавишу "А" с html кодом, во второй - привязал к ней звук, хранящийся по адресу src="sounds/clap.wav".
Подробнее об атрибуте data-* можно прочитать по ссылке: https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Using_data_attributes Оттуда выясним, что на IE ниже 11 версии данный атрибут не поддерживается, а это означает, что данный сайт в этом браузере работать не будет.
Попробуем разобраться с js-кодом.
function removeTransition(e) {
if (e.propertyName !== 'transform') return;
e.target.classList.remove('playing');
}
Функция принимает аргумент е - вероятно это и есть один из div в html-коде, проверяет есть ли у него css-свойство transform и, если свойства нет, прекращает работу, а если свойство есть, убирает класс playing, в котором это свойство прописано.
Доступ к свойству элемента позволяет получить через
propertyName
Непонятно, почему проверяется именно наличие свойства, а не класса при помощи
classList.contains
.
Такой код тоже работает:
function removeTransition(e) { if (e.target.classList.contains('playing')) { e.target.classList.remove('playing'); } return; }
Конструкция e.target нужна, чтобы произошло отследить элемент, на котором произошло событие подробнее
Здесь объяснение что это и зачем. Мы пытаемся вместо того, чтобы назначать обработчик событий для каждой кнопки отдельно, сделать единый обработчик для всех. При этом
event.target
используется для того, чтобы получить и подсветить элемент, на котором произошло событие.Правда, разобраться с этим вовсе не так просто. Похоже, вариант "одно задание за один день" не для меня.