Set an HTML5 Video to PAUSE when video player is out of view

試著忘記壹切 提交于 2019-12-10 20:18:49

问题


I'd like to do this with javascript. I'm building a presentation using Hakim El Hattab's Reveal.js as a foundation.

The way Reveal.js works is the current slide you are viewing has a class of .present, any previous slides have a class of .past, and any slides yet to come into view have a class of .future.

I would like it to automatically pause any video that is inside a slide set to .past or .future.

How should I go about this?

Thanks in advance!

************UPDATE**************

so thanks to some direction i got over on the css-tricks forums i was able to get it working on a single video using getElementById.

below is the javascript i'm using to add the .past and .future classes and simultaneously pause a video.

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();
}

the issue that i'm having now is how would i apply it to a tag name (ie: video) or possibly a class.


回答1:


Now that you posted your code, it makes it easier to fix:

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();
    }
}

See if that helps. If it doesn't, are you using a modern and standards-compliant browser? getElementsByClassName() is a relatively new feature. It works in the latest version of Chrome for me.




回答2:


I don't know if setTimeout would work here but you could try the following:

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);

Tell me if that works.




回答3:


@petschekr :guess this won't work, because classname past future is not only set to videoelements?!

i have no idea how reveals work and what kind of player you are using! but my way would be sth like:

there is only one file with the present class, right (current Slide)

a) define sth like a onChange function (for example on every button which changes pages + keypresses)

b) trigger that function before you switch pages

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()

edit: pseudocode to get you an idea!



来源:https://stackoverflow.com/questions/9383725/set-an-html5-video-to-pause-when-video-player-is-out-of-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!