HTML5 et Javascript pour lire des vidéos uniquement lorsqu'elles sont visibles
Je suis intéressé à mettre en place une page HTML avec plusieurs clips vidéo, de sorte que chaque clip vidéo seulement visible, puis s'arrête lorsque, hors de la vue.
J'ai trouvé ce grand exemple de comment cela peut être mis en œuvre, avec un clip, mais j'ai été incapable de modifier le code pour travailler avec plusieurs clips. Peut-être que j'ai besoin de convertir ce code dans une fonction pour faciliter la ré-utilisabilité?
Voici ce que j'ai à ce jour (JS Bin lié ci-dessus modifiés pour les 2 clips au lieu d'un).
Ce code semble fonctionner que pour un seul des deux éléments.
<!DOCTYPE html>
<html>
<!-- Created using jsbin.com Source can be edited via http://jsbin.com/ocupor/1/edit
-->
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
<style>
#right {
position: absolute;
top: 2000px;
}
#video1 {
position: absolute;
left: 2000px;
top: 2000px;
}
#video2 {
position: absolute;
left: 2000px;
top: 3000px;
}
</style>
<style id="jsbin-css">
</style>
</head>
#
<body style="width: 4000px; height: 4000px;">
<div id="info"></div>
<div id="down">
scroll down please...
</div>
<div id="right">
scroll right please...
</div>
<video id="video1">
<source src="http://video-js.zencoder.com/oceans-clip.mp4"/>
</video>
<script>
var video = document.getElementById('video1'), 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;
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();
}
}
checkScroll();
window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
</script>
<video id="video2">
<source src="http://video-js.zencoder.com/oceans-clip.mp4"/>
</video>
<script>
var video = document.getElementById('video2'), 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;
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();
}
} checkScroll();
window.addEventListener('scroll', checkScroll, false);
window.addEventListener('resize', checkScroll, false);
</script>
</body>
</html>
source d'informationauteur UltrasoundJelly
Vous devez vous connecter pour publier un commentaire.
À l'aide de la isInViewport plugin et jQueryvoici mon code pour la tâche
OK, je pense que cela doit être quelque chose comme ceci:
Rien de ce qui précède semblait fonctionner pour moi, mais j'ai finalement trouvé une solution: vous aurez besoin de le
visible
pluginet ce petit morceau de code ici:Cela permettra à n'importe quelle vidéo pour jouer seulement quand il passe dans la fenêtre d'affichage. En remplaçant
visible( true )
parvisible()
vous pouvez le mettre en jeu que lorsque la totalité de la vidéo, de l'élément DOM est dans la fenêtre d'affichage.
Besoin de vérifier si la vidéo est visible pendant le défilement.
Vieille question, mais je voulais juste ajouter mon grain de sel, j'ai d'abord commencé avec le jQuery, le code ci-dessus, mais a rencontré quelques problèmes avec la mise en œuvre. Cette solution doit travailler avec plusieurs vidéos, et empêche également un problème où l'utilisateur mise en pause de la vidéo et tente de défilement et elle commence de nouveau:
Je l'ai nettoyée certaines choses, et je suis en utilisant la vidéo-js, vous devrez peut-être modifier un peu pour obtenir votre mise en oeuvre de travailler.
Essayé beaucoup de solutions, la seule partiellement de travail est celui affiché ci-dessous. Le problème, c'est que le fait d'avoir 3 vidéos sur la page, la deuxième et la troisième sont essentiellement contrôlée par la première.
De sorte qu'ils commencent à jouer lorsque la page est chargée (alors qu'ils sont censés jouer lorsque dans la fenêtre d'affichage) et ils s'en pause lors de la première pause, une suggestion sur ce travail avec plusieurs vidéos?
Essayé d'utiliser
getElementById
mais n'a pas de travail, on a aussi essayé les plugins jquery, mais pas de bons résultats.Ici vous disposez de la page web où vous pouvez voir ce qui se passe, et tout le code source bien sûr.
http://185.197.128.183/~monompro/
À l'aide de jQuery, isInViewportet Coffeescript, la solution complète pour moi ressemblait à ceci:
C'est comment j'ai réussi à lire une vidéo uniquement lorsque l'utilisateur fait défiler.
J'ai utilisé IsInViewport plugin.
J'espère que vous trouverez utile!
Au cas où quelqu'un d'autre s'exécute dans cette question, j'ai été incapable d'utiliser Saike de la solution sur mon site WordPress en raison de la façon dont les vidéos ont été automatique intégré (MediaElement joueur). Cependant, qwazix la solution travaillé avec quelques modifications. Voici le code jQuery qui fonctionne avec le IsInView plugin. Voici mes inclure des scripts (placé à la fin de
footer.php
dans mon dossier du thème).Et le code jQuery (modifier 400 à votre tolérance au goût)
Seul problème que j'ai avec ce code c'est qu'il ne redémarrer un clip vidéo sur faites défiler jusqu'même si en pause par l'utilisateur. N'était pas de rupture problème sur mon site. Voici le code en action: Ultrasoundoftheweek.com