Видео HTML5 не воспроизводятся автоматически с типичным js

Я использую tippy.js, и когда я добавляю <video loop muted playsinline autoplay> во всплывающую подсказку с помощью allowHTML: true, видео не будет автоматически воспроизводиться в Chrome. Хотя в фаерфоксе и в сафари работает.

Как я могу этого добиться?

Вот мой js:

const modal = card.querySelector('.modal'),
            modalContent = modal.innerHTML`

      tippy('.card', {
        content: modalContent,
        allowHTML: true,
        interactive: true,
        animation: 'shift-away',
        followCursor: true,
        arrow: false
      });

И вот мой html:

<div class = "modal">
   <div>
      <video loop muted playsinline autoplay>
        <source src = "http://localhost:8888/artifacts/wp-content/uploads/2022/05/Artifacts-Landing.mp4" type = "video/mp4"> 
      </video>
   </div>
</div>

я пытался добавить

card.querySelector('video').play()

но это не работает.

Заранее большое спасибо за помощь,

"Это не работает" не является описательным, это какая-то ошибка или что именно

Joshua 20.10.2022 11:28

@ Джошуа, я не получаю ошибок, только видео остается на паузе в первом кадре. Возможно, это связано со статусом видимости всплывающей подсказки? Так как всплывающая подсказка скрыта первой

johangiraud 20.10.2022 11:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Действительно странно, что приглушенное видео не воспроизводилось автоматически. Вы можете использовать setTimeout, а затем вызвать play() с помощью события onShow(). У меня почему-то onShown() никогда не срабатывает.

Вот рабочий фрагмент:

const modal = document.querySelector('.modal'),
  modalContent = modal.innerHTML;

tippy('.card', {
  content: modalContent,
  allowHTML: true,
  interactive: true,
  animation: 'shift-away',
  followCursor: true,
  arrow: false,
  onShow(instance) {
    setTimeout(() => {
      let video = instance.popper.getElementsByTagName('video')[0];
      video.currentTime = 0; //start from begining
      video.play();
    }, 1);

  },
});
.modal {
  display: none;
}

video {
  width: 40vw;
}

.card {
  padding-top: 10vh;
}

h1{
  display:inline;
  margin:1em;
}
<!-- Production -->
<h1 class = "card">CARD 1</h1>
<h1 class = "card">CARD 2</h1>
<script src = "https://unpkg.com/@popperjs/core@2"></script>
<script src = "https://unpkg.com/tippy.js@6"></script>

<div class = "modal">
  <div>
    <video loop muted playsinline autoplay>
        <source src = "https://upload.wikimedia.org/wikipedia/commons/transcoded/6/6c/%22Movbild-fizika%22_falo_en_Big_Buck_Bunny.webm/%22Movbild-fizika%22_falo_en_Big_Buck_Bunny.webm.720p.vp9.webm" type = "video/mp4"> 
      </video>
  </div>
</div>

Большое спасибо @Miro! Он работает отлично, но ломается, когда в доме более одного видео. Я пытался заменить document.getElementsByTagName('video')[1].play(); на card.getElementsByTagName('video')[1].play();, но получаю сообщение о невозможности чтения свойств undefine. Если я попробую card.getElementsByTagName('video')[0].play();, я не получаю ошибок, но автозапуск не запускается. Странная причина, если я использую console.info card.getElementsByTagName('video')[0], я получаю элемент dom в консоли.

johangiraud 20.10.2022 17:27

Попробуйте с instance.popper.getElementsByTagName('video')[0].play() Это должно быть нацелено на видео внутри текущего модального окна / всплывающей подсказки. Отредактировал пример выше

Miro 20.10.2022 22:51

Другие вопросы по теме