Показывать видео при нажатии на изображение с помощью руля?

#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 Но я предлагаю вам хранить только идентификатор видео. Таким образом, вы можете использовать его, возможно, каким-то другим способом позже. Например, вы можете поместить ссылку на видео вместо ее встраивания.