Всем доброго времени суток. У кого есть готовый вариант модуля с YouTube iframe api https://developers.google.com/youtube/iframe_api_reference?hl=ru#Requirements ? Или может кто-то подскажет, как его разместить в рамках модуля? А то помещая код в модуль, он или не выполняется или выдаёт ошибку, хотя при инлайновой вставке на страницу, все нормально.
Должно быть что-то типа:
Дальше можно общаться с блоком через его собственные события
ready
иchange
.Спасибо огромное, сейчас попробую.
А если используется на проекте CDN bem-components, то первые 2 файла как будут выглядить в html?
При использовании dist-а, депсы не нужны — там уже все в комплекте из коробки. А разметка получится какая-то такая:
Ага, понял. Есть еще момент один. Вы написали, что теперь можно использовать его собственные события ready и change, а в деле это как выглядит, что-то типо:
Если да, то ошибку выдает, как вот к примеру вызвать вот это событие, как в доках гугла:
Либо можно забирать оригинальный объект события из второго аргумента:
Спасибо! Вы просто волшебник!))
Если у меня на странице несколько блоков, где должно инициализнуться проигрывание видео при наведении на этот блок и после анховера произойти player.destroy(), то как тогда здесь сделать 2 функции, одна из которых делает player.playVideo(), а другая player.destroy()? Что-то я уже несколько часов с этим борюсь, но ничего не получается, еще одна сложность в том, что блоков таких на странице много и там похоже возникают проблемы с кэшем этих блоков.
P.S. сам блок состоит из одного тега и я в БЭМ документации не нашел, как очистить кэш блока, а не элемента
Напиши, пожалуйста, DOM-структуру, я пока не до конца понимаю задачу.
Если упростить, то дом примерно такой:
Таких блоков много, подгружаться они потом будут аяксом. У каждого блока лежит свой id видео, которое при наведении на блок article, должно начать проигрываться и при анховере исчезать. Для этого в ютуб апи я нашел функцию destroy().
Модуль блока article выглядит примерно так:
А модуль youtube, написанный вами, сейчас выглядит примерно так:
Естественно это не работает и очень нужна ваша помощь, что бы заставить это работать, а то я уже начинаю писать монстра на jQuery)))
Предположу, что проблема в том, что
youtube
переписывает DOM-узел в момент инициализации плеера (заменяя его наiframe
и это ломаетi-bem
). Исправить это просто, достаточно добавить вложенный узел для плеера:По коду
article
на мой вкус очень дорого убивать и пересоздавать плеер на ховер/анховер, если он уже был создан. Будет гораздо дешевле просто останавливать воспроизведение и дописать стилей типаА JS код блока
youtube
можно чуть поправить, чтобы на руках всегда был промис с объектом плеера:Спасибо за помощь, сейчас попробую сделать.
Все же осталась одна проблемка, таких блоков много и почему-то видео инитится только на самом последнем блоке.
И еще, я хотел делать инициализацию плеера и дестракт его при ховере, так как мне кажется будет слишком напряжно для браузера инициализнуть сразу штук 30 видео, так как блоков article на странице много
Добавил комменты к ключевым изменениям в коде.
Заработало!)) Спасибо большое