Skip to content Skip to sidebar Skip to footer

Play Video In Loop With Different Timing And Function

I have 2 function which play the same video but with different timing. I can't play make the function to work properly. Looks like the function doesn't reset the other function I t

Solution 1:

That's because the listener is still there, you need to remove it.

Remember, in order to remove it, you can't use anonymous function as callback so I turned it into defined function.

var video = document.getElementById('videoElm');
const playShort = function() {
  if (this.currentTime >= 2) {
    this.currentTime = 0; // change time index here
  }
};
const playFull = function() {
  if (this.currentTime >= 24) {
    this.currentTime = 0; // change time index here
  }
};

functionplayShortVideo() {
  video.removeEventListener("timeupdate", playFull, false)
  video.addEventListener("timeupdate", playShort, false);

  video.load();
  video.play();
}

functionplayFullVideo() {
  video.removeEventListener("timeupdate", playShort, false)
  video.addEventListener("timeupdate", playFull, false);
  
  video.load();
  video.play();
}

//play short video by defaultplayShortVideo();


//CLICK events var btnshort = $('.shortvideo');
var btnfull = $('.fullvideo');
btnshort.click(function() {

  playShortVideo();
});

btnfull.click(function() {
  playFullVideo();
});
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><div><videoid="videoElm"autoplaymutedcontrolsloop><sourcesrc="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4"type="video/webm"></video></div><buttonclass="shortvideo">play 2 secs only</a><br><buttonclass="fullvideo">loop full video</button>

And here is the approach for starting the video at 49 sec (60 > 49 + 10)

const shortStartTime = 49;
const shortDuration = 10;

var video = document.getElementById('videoElm');
const playShort = function() {
  if (this.currentTime > (shortStartTime + shortDuration)) {
    this.currentTime = shortStartTime; // change time index here
  }
};
const playFull = function() {
  if (this.currentTime >= 24) {
    this.currentTime = 0; // change time index here
  }
};

functionplayShortVideo() {
  video.removeEventListener("timeupdate", playFull, false)
  video.addEventListener("timeupdate", playShort, false);

  video.load();
  video.currentTime = shortStartTime;
  video.play();
}

functionplayFullVideo() {
  video.removeEventListener("timeupdate", playShort, false)
  video.addEventListener("timeupdate", playFull, false);
  
  video.load();
  video.play();
}

//play short video by defaultplayShortVideo();


//CLICK events var btnshort = $('.shortvideo');
var btnfull = $('.fullvideo');
btnshort.click(function() {
  playShortVideo();
});

btnfull.click(function() {
  playFullVideo();
});
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><div><videoid="videoElm"autoplaymutedcontrolsloop><sourcesrc="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4"type="video/webm"></video></div><buttonclass="shortvideo">play 2 secs only</a><br><buttonclass="fullvideo">loop full video</button>

Solution 2:

That happens because you're attaching a timeUpdate event listener multiple times. You either need to use one-only or delete it before attaching a new one.

var video = document.getElementById('videoElm');
var listener;
var starttime = 0;
var endtime = 2;

functionupdateVideo(e) {
  if (e.target.currentTime >= endtime) {
    e.target.currentTime = 0; // change time index here
  }
}

functionplayShortVideo() {
  starttime = 0; // start at 0 seconds
  endtime = 2; // stop at 2 secondsif (!listener) {
    listener = video.addEventListener("timeupdate", updateVideo, false);
  }
  video.load();
  video.play();
}

functionplayFullVideo() {
  starttime = 0; // start at 0 seconds
  endtime = 24; // stop at 2 secondsif (!listener) {
    listener = video.addEventListener("timeupdate", updateVideo, false);
  }
  video.load();
  video.play();
}

//play short video by defaultplayShortVideo();


//CLICK events var btnshort = $('.shortvideo');
var btnfull = $('.fullvideo');
btnshort.click(function() {

  playShortVideo();
});

btnfull.click(function() {
  playFullVideo();
});
<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><div><videoid="videoElm"autoplaymutedcontrolsloop><sourcesrc="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4"type="video/webm"></video></div><buttonclass="shortvideo">play 2 secs only</a><br><buttonclass="fullvideo">loop full video</button>

Post a Comment for "Play Video In Loop With Different Timing And Function"