Воспроизвести видео html 5 при помощи jquery
Есть код:
<div class="owl-item active">
<div class="scrollflow -slide-top s22">
<div class="video_block video_block3 ani2">
<video id="video_slays140" width="100%" preload="metadata" class="scrollflow -slide-top -opacity" loop playsinline>
<source src="https://kulibinstudio.com/image/catalog/video/Mob/video0002.mp4" type="video/mp4;codecs="avc1.42E01E, mp4a.40.2"">
</video>
</div>
</div>
</div>
let block_show140 = null;
let video140 = $("#video_slays140");
$(window).scroll(function(){
scro_play140();
});
function scro_play140() {
let wt = $(window).scrollTop();
let wh = $(window).height();
let et140 = $('#video_slays140').offset().top;
let eh140 = $('#video_slays140').outerHeight();
if (wt + wh >= et140 && wt + wh - eh140 * 2 <= et140 + (wh - eh140)){
if (block_show140 == null || block_show140 == false) {
video140.pause();
}
block_show140 = true;
} else {
if (block_show140 == null || block_show140 == true) {
video140.play();
}
block_show140 = false;
}
}
его суть: при прокрутке к элементу происходит событие. все отлично работает. проблема: но видео не запускается. консоль гугла пишет: Uncaught TypeError: video140.play is not a function скрин: http://joxi.ru/52apWXWUgBnqQm |
StartGames,
video140 у вас это объект jquery, у этого объекта нет никаких play. вам нужен сам элемент, в объекте он хранится под индексом ноль. video140[0].pause(); video140[0].play(); |
спасибо, вы совершенно правы)
|
спасибо еще раз, но не подскажите как включить или отключить звук?
пробовал так: video140[0].unmuted(); и так: video140[0].muted(); не помогает. |
StartGames,
video140[0].muted = false; video140[0].muted = true; |
ого как все просто то))
Но к сожалению после такого получил ошибки: http://joxi.ru/bmoKyRyH7k5PYm (index):4091 Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first. https://goo.gl/xX8pDD |
StartGames,
при отсутствии на странице живого юзера играть ничего не будет!!! |
Цитата:
|
StartGames,
автоматом звук и видио запрещены, пока по странице не кликнут или ещё как-то произведут событие на странице руками, а не скриптом. |
StartGames,
SuperZen, про play |
Цитата:
|
Цитата:
В любом случае огромное Вам спасибо)) Не первый раз выручаете.:yes: |
Решил отключать видео при клике на баннер.
Действия: При клике на сам блок отключать все видео в этом блоке, и затем моментально запускать только то, у которого в пути есть класс .active Но столкнулся с проблемой: Я пытался отключить все видео вот таким запросом:
$('#banner_slays_{{ module_id }}').click(function() {
$('#banner_slays_{{ module_id }} .owl-item video').pause();
});
Но опять же, он не сработает по причине которую вы описывали ранее. Сработает только такая конструкция:
$('#banner_slays_{{ module_id }}').click(function() {
$('#banner_slays_{{ module_id }} .owl-item video')[0].pause();
});
Проблема: Я бы мог создать действие для каждого видео в этом блоке. На данный момент их 4. Но я не знаю буду ли в будущем добавлять слайды, и тогда придется опять идти в код и добавлять событие. А это неудобно очень. Вопрос: Можно как то одним действием отключить все видео в этом блоке? Зачем: Я не знаю какой слайд был перед включен перед тем как пользователь переключил слайд. И соответственно это видео будет продолжать играть. А так, после клика я просто отключаю их всех и сразу включаю только то что содержит в пути класс .active Таким образом я и неактивные отрубаю, и активный слайд включаю. |
Цитата:
$('#banner_slays_{{ module_id }}').click(function() {
$('#banner_slays_{{ module_id }} .owl-item video').each((i, video) => video.pause());
})
|
Цитата:
|
| Часовой пояс GMT +3, время: 22:59. |