播放视频时滚动到,但播放视频一次

Play video when scrolled to, BUT play video ONCE

本文关键字:播放 视频 一次 滚动      更新时间:2023-09-26

我想改编我在http://jsfiddle.net/jAsDJ/找到的代码。这几乎是我所需要的,除了我希望视频只播放一次。上面链接中的代码即使在去掉视频标签上的loop属性后也会在滚动上播放。

在http://jsfiddle.net/duya0ntw/1/您可以看到我所做的:添加JS第4行,第23-26行和第34-38行。我试图创建一个函数来确定视频是否完整播放,并且只在视频未播放时播放。

下面是JS。任何帮助都将非常感激。我已经摆弄了几个小时了,还是没有运气。(JS新手)


var videos = document.getElementsByTagName("video"), fraction = 0.8;
var once = new Array(videos.length);
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) {
            if (once[i] == false) {
                video.play();
                once[i] = true;
                }
            } 
        else {
        //video.pause();
    }
}
}
$(document).ready(function () {
for (var i = 0; i < videos.length; i++) {
    once[i] = false;
}
});

变化:

if (visible > fraction)

:

if (visible > fraction && video.currentTime < video.duration)

这样你的视频就不会循环播放-只有当播放头还没有结束时,它们才会播放。

JSFiddle: https://jsfiddle.net/jAsDJ/218/

这是我用来构建这个答案的参考,这可能会有所帮助。