javascript - HTML5 和 Javascript 仅在可见时播放视频

标签 javascript html video html5-video

我有兴趣设置一个包含多个视频剪辑的 HTML 页面,以便每个视频剪辑仅在可见时播放,然后在不可见时暂停。

我找到了 this great example关于如何用一个剪辑实现这一点,但我一直无法修改代码以使用多个剪辑。也许我需要将这段代码转换成一个函数以便于重用?

这是我目前所拥有的(上面链接的 JS Bin 修改了 2 个剪辑而不是一个)。

此代码似乎只适用于两个剪辑之一。

<!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>

最佳答案

使用 isInViewport插件和 jQuery ,这是我的任务代码

$('video').each(function(){
    if ($(this).is(":in-viewport")) {
        $(this)[0].play();
    } else {
        $(this)[0].pause();
    }
})

关于javascript - HTML5 和 Javascript 仅在可见时播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163756/

相关文章:

android - youtube生成的url,用于在android应用中搜索视频名称

php - 如何在 PHP header() 之前发送 header ?

javascript - 负面展望中的字符串被部分捕获

JavaScript onclick 事件仅在双击时有效

javascript - 动态更改使用 Polymer 构建的应用程序样式的最佳方法是什么?

iphone - iPhone 视频流媒体网站的问题

iphone - 在iOS中旋转视频

javascript - 当模板加载到 ember 中时,如何触发操作?

javascript - React Native - Alert.alert 似乎没有调用函数

javascript - 如何获取html内容宽度而不是窗口宽度