【问题标题】:Set an HTML5 Video to PAUSE when video player is out of view当视频播放器不在视野范围内时,将 HTML5 视频设置为暂停
【发布时间】:2012-02-21 19:18:12
【问题描述】:

我想用 javascript 来做这件事。我正在使用 Hakim El Hattab 的 Reveal.js 作为基础来构建演示文稿。

Reveal.js 的工作方式是您正在查看的当前幻灯片有一个 .present 类,任何以前的幻灯片都有一个 .past 类,任何尚未显示的幻灯片都有一个 .future 类。

我希望它自动暂停设置为 .past 或 .future 的幻灯片内的任何视频。

我该怎么办?

提前致谢!

************更新**************

因此,多亏了一些指导,我克服了 css-tricks forums 的问题,我能够使用 getElementById 让它在单个视频上工作。

下面是我用来添加 .past 和 .future 类并同时暂停视频的 javascript。

if( i < index ) {
    // Any element previous to index is given the 'past' class
    slide.setAttribute('class', 'past');
    document.getElementById('vid').pause();
}
else if( i > index ) {
    // Any element subsequent to index is given the 'future' class
    slide.setAttribute('class', 'future');
    document.getElementById('vid').pause();
}

我现在遇到的问题是如何将它应用于标签名称(即:视频)或可能的类。

【问题讨论】:

    标签: javascript html video html5-video


    【解决方案1】:

    既然您已经发布了代码,那么修复起来就更容易了:

    if( i < index ) {
        // Any element previous to index is given the 'past' class
        slide.setAttribute('class', 'past');
        var vids = document.getElementsByClassName("past");
        for (var i = 0; i < vids.length; i++) {
            vids[i].pause();
        }
    }
    else if( i > index ) {
        // Any element subsequent to index is given the 'future' class
        slide.setAttribute('class', 'future');
        var vids = document.getElementsByClassName("future");
        for (var i = 0; i < vids.length; i++) {
            vids[i].pause();
        }
    }
    

    看看是否有帮助。如果没有,您是否使用现代且符合标准的浏览器? getElementsByClassName() 是一个相对较新的功能。它适用于我的最新版 Chrome。

    【讨论】:

    • 非常感谢petschekr!我一定会试试这个。只是一件事,此演示文稿旨在发送给客户查看,因此不知道他们将使用哪些浏览器。我希望能支持浏览器早至 Firefox 3.6 和 IE9,但如果你可以的话,请让我知道它是否不会。我可能不得不为每个视频添加一个 getElementById www
    • 这是一个很好的图表,显示了哪些浏览器支持它,哪些不支持。如果IE9和FF3.6最低,应该没问题:caniuse.com/getelementsbyclassname
    • 感谢 petschekr,这看起来可行。非常感谢您的帮助,好先生!
    【解决方案2】:

    我不知道setTimeout 是否可以在这里工作,但您可以尝试以下方法:

    function PauseVids() {
        var vids = document.getElementsByClassName("past");
        var vids2 = document.getElementsByClassName("future");
        for (var i = 0; i < vids.length; i++) {
            vids[i].pause();
        }
        for (var i = 0; i < vids2.length; i++) {
            vids2[i].pause();
        }
    }
    
    // Within onLoad or $(document).ready()
    setTimeout("PauseVids()", 1000);
    

    告诉我这是否有效。

    【讨论】:

    • 感谢 petschekr。我试图让它适应我正在做的事情,但我无法让它发挥作用。
    • 任何 JS 错误?另外,你用的是什么浏览器?试试 Chrome 看看能不能用
    • 在 Firefox 中失败并得到错误:vids[i].pause is not a function
    【解决方案3】:

    @petschekr:猜猜这行不通,因为过去未来的类名不仅设置为视频元素?!

    我不知道显示如何工作以及您使用的是哪种播放器!但我的方式是这样的:

    当前类只有一个文件,对(当前幻灯片)

    a) 像 onChange 函数一样定义某事(例如在每个更改页面的按钮上 + 按键)

    b) 在切换页面之前触发该功能

    function onChange(){
           var currentSlice = document.getElementByClassName('present')  //get current html elemen
           var videoObjects = currentSlice.getElementsByTag('video')  //get videoelements here html5 video
           for each videoObj      
                videoObj.pause()
    

    编辑:伪代码让你有个想法!

    【讨论】:

    • 感谢您的帮助,但我无法让它与我的代码一起使用。
    猜你喜欢
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多