I have a video that I fade in, play for ca. 25 seconds, fade out, wait 30 seconds and then fade in again. I use the following to trigger playback after video has ended:
$('.header-video').get(0).onended = function(e) {
$(this).fadeOut(200);
setTimeout(function(){
playVideo();
},8000);
}
Problem is that fading don't start until the video has actually stopped playback, so I wondered if there is some clever way I can get an event a few seconds in advance of the video ending? (probably not)
Alternatively I could just time the video and trigger a timed event, but maybe someone here can think of some cool wizardry that would enable me to do it in a more dynamic way than having to time the video manually.
I have a video that I fade in, play for ca. 25 seconds, fade out, wait 30 seconds and then fade in again. I use the following to trigger playback after video has ended:
$('.header-video').get(0).onended = function(e) {
$(this).fadeOut(200);
setTimeout(function(){
playVideo();
},8000);
}
Problem is that fading don't start until the video has actually stopped playback, so I wondered if there is some clever way I can get an event a few seconds in advance of the video ending? (probably not)
Alternatively I could just time the video and trigger a timed event, but maybe someone here can think of some cool wizardry that would enable me to do it in a more dynamic way than having to time the video manually.
Share Improve this question asked Jul 30, 2014 at 11:28 zkwskzkwsk 2,1366 gold badges31 silver badges35 bronze badges 2-
Videos have a
duration
and acurrentTime
property. You could just use setInterval to check whencurrentTime > duration - 3000
– CodingIntrigue Commented Jul 30, 2014 at 11:32 - Of course, should have thought of that. Post it as an answer and I'll accept it. – zkwsk Commented Jul 30, 2014 at 11:33
1 Answer
Reset to default 7You can use the timeupdate event that fires whenever the video's currentTime attribute updates.
Reference: https://developer.mozilla/en-US/docs/Web/Events/timeupdate
Example:
$(document).ready(function(){
$( '.header-video' ).on(
'timeupdate',
function(event){
// Save object in case you want to manipulate it more without calling the DOM
$this = $(this);
if( this.currentTime > ( this.duration - 3 ) ) {
$this.fadeOut(200);
}
});
});