#javascript #html #handlebars.js
#javascript #HTML #handlebars.js
Вопрос:
Я пытаюсь работать на веб-странице, на которой при нажатии на тег изображения я должен иметь возможность показывать скрытое видео. Я использовал рули. Я также хочу закрыть это видео, когда какой-либо пользователь нажимает на другую фотографию.
<script type = "text/x-handlebars-template" id = "template">
<div class = "row row-eq-height">
{{#each images}}
<div class = " col-xs-12 col-md-3">
<div class = "thumbnail">
<img src = "{{src}}" style = "width : 50%;height :25%;"
onClick = document.getElementById("video").style.display = "block";/>
<iframe style = "display:none;" id = "video" src = "{{video}}"/>
<h3>{{Song}}</h3>
</div>
</div>
{{/each}}
</div>
</script>
Это не работает, видео скрыты, но они не отображаются обратно, когда я нажимаю на фотографию.
Пожалуйста, не стесняйтесь задавать вопросы, если вам нужно больше ясности в моем запросе.
Любая помощь приветствуется. Заранее спасибо.
Комментарии:
1. Вам нужен скрипт или другой для onclick. Невозможно сделать это только с помощью руля.
Ответ №1:
Для достижения лучшей производительности я предлагаю вам просто создать все, кроме iframe. Когда кто-то нажимает на миниатюру видео, создайте iframe на лету и добавьте к родительскому. Если вы сделаете это, вам не придется скрывать видео и пытаться их отобразить.
<div class="video-container" data-video="{{video}}">
<div class="video-overlay" onclick="fetchVideo()">
<img src = "{{src}}" class="video-thumbnail"/>
<h3>{{Song}}</h3>
</div>
<div class="video-player"></div>
</div>
.video-player {
// this is iframe container
}
.video-overlay {
// syles
transition: opacity 0.3s ease-out;
}
.video-thumbnail {
width : 50%;
height: 25%;
object-fit: cover;
}
.hidden {
opacity: 0;
}
function fetchVideo() {
let parent = event.target.parentElement;
let video = parent.dataset.video;
let iframe = `<iframe width="560" height="315" src="${video}" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>`;
let player = event.target.nextElementSibling;
player.insertAdjacentHTML('beforeend', iframe);
event.target.classList.add("hidden");
}
Комментарии:
1. Спасибо за помощь. Я новичок в javascript, и я в замешательстве, я хочу, чтобы видео отображалось при нажатии на изображение, но в вашем коде функция onClick записана в «наложении видео». Могу ли я узнать, как это способствует моей задаче
2. video-overlay — это контейнер с изображением и названием песни. Моя ошибка, я должен был добавить их. Я отредактировал свой ответ.
3. Видео не воспроизводится. Видео воспроизводится нормально, когда я указываю идентификатор видео вместо ${video} в функции fetchVideo(). Должен ли я указывать какой-либо класс с id = «video»? Пожалуйста, помогите
4. Я только что заметил, что вы сохранили весь URL-адрес, а не только идентификатор видео в переменной video. Создание src= iframe
${video}
должно работать. Я обновил свой ответ.5. Посмотрите на это: codepen.io/bulentAkgul/pen/pobJgVE?editors=1111 Но я предлагаю вам хранить только идентификатор видео. Таким образом, вы можете использовать его, возможно, каким-то другим способом позже. Например, вы можете поместить ссылку на видео вместо ее встраивания.