Есть ли способ автовоспроизвести видео HTML5 только в том случае, если у пользователя есть видео (или определенный процент видео) в окне просмотра браузера?Воспроизведение видео HTML5 при прокрутке до
ответ
Вы можете использовать window.pageXOffset и window.pageYOffset, чтобы проверить, насколько далеко прокручивается окно вашего браузера как по вертикали, так и по горизонтали. Используйте их с window.innerWidth
и innerHeight
и некоторой базовой математикой геометрии, чтобы рассчитать, насколько ваша видимая страница перекрывается с самим видео. Поместите это все в функцию, которую вы можете прикрепить к событию scroll
и resize
на объекте окна, чтобы запускать проверку каждый раз, когда изменяется прокрутка.
Вот некоторые примеры кода:
var video = document.getElementById('video'),
info = document.getElementById('info'),
fraction = 0.8;
function checkScroll() {
var x = video.offsetLeft,
y = video.offsetTop,
w = video.offsetWidth,
h = video.offsetHeight,
r = x + w, //right
b = y + h, //bottom
visibleX,
visibleY,
visible;
if (window.pageXOffset >= r ||
window.pageYOffset >= b ||
window.pageXOffset + window.innerWidth < x ||
window.pageYOffset + window.innerHeight < y
) {
info.innerHTML = '0%';
return;
}
visibleX = Math.max(0, Math.min(w, window.pageXOffset + window.innerWidth - x, r - window.pageXOffset));
visibleY = Math.max(0, Math.min(h, window.pageYOffset + window.innerHeight - y, b - window.pageYOffset));
visible = visibleX * visibleY/(w * h);
info.innerHTML = Math.round(visible * 100) + '%';
if (visible > fraction) {
video.play();
} else {
video.pause();
}
}
window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
//one time at the beginning, in case it starts in view
checkScroll();
//as soon as we know the video dimensions
video.addEventListener('loadedmetadata', checkScroll, false);
Этот код предполагает довольно простой макет страницы. Если ваше видео расположено абсолютно внутри другого элемента, который имеет «положение: относительный», то вам нужно будет немного поработать, чтобы вычислить правильную позицию видео. (То же самое происходит, если видео было перемещено с CSS-преобразований.)
Я предполагал, что вопрос состоял в том, чтобы играть один раз, когда определенный процент видео был загружен. Я не читал, что близко думаю –
Hm выглядит хорошо. Есть ли способ сделать это с помощью jQuery? – jp89
Да. Вы можете использовать '$' вместо getElementById и '$ ('# video'). Bind (...' вместо addEventListener. Вы можете использовать «.offset()», если хотите. – brianchirls
надеюсь, что это помогает, но это есть ответ
var videos = document.getElementsByTagName("video"),
fraction = 0.8;
function checkScroll() {
for(var i = 0; i < videos.length; i++) {
var video = videos[i];
var x = video.offsetLeft, y = video.offsetTop, w = video.offsetWidth, h = video.offsetHeight, r = x + w, //right
b = y + h, //bottom
visibleX, visibleY, visible;
visibleX = Math.max(0, Math.min(w, window.pageXOffset + window.innerWidth - x, r - window.pageXOffset));
visibleY = Math.max(0, Math.min(h, window.pageYOffset + window.innerHeight - y, b - window.pageYOffset));
visible = visibleX * visibleY/(w * h);
if (visible > fraction) {
video.play();
} else {
video.pause();
}
}
}
window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
Коротко
Скажем, наш браузер окно W
в настоящее время прокручено до y-позиции scrollTop
и scrollBottom
O ur видео НЕ будет воспроизводиться, когда его позиция находится на V1
или V2
, как показано ниже снимок.
детали Код
$(document).ready(function() {
// Get media - with autoplay disabled (audio or video)
var media = $('video').not("[autoplay='autoplay']");
var tolerancePixel = 40;
function checkMedia(){
// Get current browser top and bottom
var scrollTop = $(window).scrollTop() + tolerancePixel;
var scrollBottom = $(window).scrollTop() + $(window).height() - tolerancePixel;
media.each(function(index, el) {
var yTopMedia = $(this).offset().top;
var yBottomMedia = $(this).height() + yTopMedia;
if(scrollTop < yBottomMedia && scrollBottom > yTopMedia){ //view explaination in `In brief` section above
$(this).get(0).play();
} else {
$(this).get(0).pause();
}
});
//}
}
$(document).on('scroll', checkMedia);
});
Пожалуйста, объясните свои ответы вместо – Gary
Решение Mikkel объясняется в тексте комментария, оно элегантно и работает. Плюс мне нравится, что он использует jQuery. Спасибо Mikkel! – soulphysics
Я добавил объяснение для @MikkelJensen отличный ответ –
Существует новый API для этого сценария, называется Intersection_Observer_API, который Chrome 51+ и 15+ Край поддерживает.
var options = {
root: document.querySelector('.scroll-container'),
rootMargin: '0px',
threshold: 1.0 // trigger only when element comes into view completely
};
var ob = new IntersectionObserver((entries, observer) => {
entries[0].target.classList.toggle('red');
}, options);
// observe all targets, when coming into view, change color
document.querySelectorAll('.target').forEach((item) => {
ob.observe(item);
});
Вот простая демонстрация: https://codepen.io/hectorguo/pen/ybOKEJ
- 1. Воспроизведение видео при прокрутке до, BUT воспроизведение видео ONCE
- 2. Воспроизведение видео в формате HTML5 при прокрутке, затем воспроизведение до завершения и воспроизведение только один раз
- 3. Воспроизведение HTML5 при прокрутке с ошибками javascript
- 4. HTML5 Откат видео при прокрутке
- 5. Видео на прокрутке html5
- 6. HTML5 Воспроизведение видео после прокрутки.
- 7. Автоматическое полноэкранное воспроизведение видео html5?
- 8. Воспроизведение видео HTML5 и Apache
- 9. HTML5 анимация - играйте при прокрутке до
- 10. HTML5 видео - воспроизведение только части видео
- 11. Автовоспроизведение видео Youtube при прокрутке до
- 12. Как остановить воспроизведение видео в YTPlayerView внутри UICollectionViewCell при прокрутке?
- 13. Принудительное воспроизведение коротких видео HTML5 в Safari
- 14. Как синхронизировать воспроизведение видео в HTML5?
- 15. Воспроизведение/Пауза HTML5 Видео по размеру экрана
- 16. Воспроизведение анимации на прокрутке
- 17. Воспроизведение звука при прокрутке UIScrollView
- 18. Воспроизведение видео в формате HTML5 вперед и назад при зависании
- 19. Как изящно остановить воспроизведение видео html5
- 20. Воспроизведение HTML5-видео на IPad и поиск
- 21. Воспроизведение видео с использованием Html5 в Android
- 22. Воспроизведение html5 видео-тегов одновременно на Safari
- 23. Воспроизведение видео с html5 в angualrjs
- 24. Воспроизведение html5 видео внутри webview не работает
- 25. Воспроизведение видео и аудио HTML5 одновременно
- 26. Воспроизведение встроенного видео в UIWebView с HTML5
- 27. впрыскивание и воспроизведение html5 видео без мерцания
- 28. Воспроизведение видео с помощью HTML5/JQuery
- 29. Воспроизведение HTML5 hls видео с Android-браузера
- 30. Воспроизведение/Пауза HTML5-видео с использованием JQuery
Вы можете иметь DIV с дисплеем ни ... и если возраст этого человека правильно затем добавить тег видео с источника видеосигнала в DIV и измените отображение, чтобы заблокировать .... если это то, что вы хотите, я мог бы вам помочь ... просто покажите мне, как вы хотите получить возраст посетителя, и вот оно. xD – Hackerman