Ответ Супершарпса не на 100% правильный.
click
события всплывают в DOM,
но CustomEvents (внутри shadowDOM) не
Почему запуск определенного события с dispatchEvent не подчиняется всплывающему поведению событий?
Так что вы должны сами добавить bubbles:true
:
[yoursender].dispatchEvent(new CustomEvent([youreventName], {
bubbles: true,
detail: [yourdata]
}));
больше: https://javascript.info/dispatch-events
примечание: detail
может быть функцией: Как взаимодействовать между веб-компонентами (собственный пользовательский интерфейс)?
Для задач программирования на основе событий
this.cards.forEach(card => {
card.flipCard(true)
})
Прежде всего, this.cards
не требуется, так как все карты доступны в [...this.children]
!! Помните, в JavaScript объекты передаются по ссылке, поэтому ваш this.cards
указывает на точное то же самое DOM потомков
У вас здесь есть зависимость,
Игра должна знать о методе .flipCard
в Карте.
► Заставьте вашу игру памяти отправлять ОДНО событие, полученное КАЖДОЙ картой
подсказка: каждая карта должна «слушать» на уровне Game DOM, чтобы получить всплывающее событие
в моем коде весь цикл:
game.emit('allCards','close');
Карты несут ответственность за прослушивание правильного EventListener
(прилагается к card.parentNode
)
Таким образом, не имеет значения, сколько (или что еще) карт в вашей игре
DOM - это ваша структура данных
Если ваша игра больше не заботится о том, сколько у нее детей или у каких детей DOM,
и он не ведет учет уже имеющихся элементов,
тасование становится куском пирога:
shuffle() {
console.log('► Shuffle DOM children');
let game = this,
cards = [...game.children],//create Array from a NodeList
idx = cards.length;
while (idx--) game.insertBefore(rand(cards), rand(cards));//swap 2 random DOM elements
}
Моя глобальная функция rand, генерирующая случайное значение из массива ИЛИ число
rand = x => Array.isArray(x) ? x[rand(x.length)] : 0 | x * Math.random(),
Дополнительный вызов
Если вы правильно поняли программирование на основе событий,
затем создание Игры памяти с тремя соответствующими картами - еще один кусок пирога
.. или 4 ... или N подходящих карт