Я использую функцию doPlaySequence
, чтобы воспроизвести несколько видеороликов, а затем показать картинку с функцией drawConfig
. Я написал код, как это:jQuery обещание: функция обратного вызова, вызванная сразу
function wait(dtd) {
var dtd = $.Deferred();
setTimeout(function() {
doPlaySequence();
dtd.resolve();
}, 0);
return dtd.promise();
}
wait().then(drawConfig);
Однако drawConfig
вызывается сразу, пока видео не заканчиваются. Я просто скопировал пример просто так, чтобы код выглядел уродливым. Я использую video.js для воспроизведения видео.
var stropsrc = new Array(3);
stropsrc[0]= "../rs/MOVIE/KlogoPk.mp4";
stropsrc[1]="../rs/MOVIE/theme.mp4";
stropsrc[2]= "../rs/MOVIE/OpPk.mp4";
function doPlaySequence()
{
var divcontainer = document.createElement("div");
divcontainer.setAttribute("id","divop");
document.body.appendChild(divcontainer);
var playID = "op0";
var opplay = document.createElement('video');
opplay.setAttribute("id",playID);
opplay.preload = "none";
divcontainer.appendChild(opplay);
opplay.src = stropsrc[0];
var AttrObj = {"datacount":0};
var myPlayer;
videojs.setAttributes(opplay,AttrObj);
myPlayer = videojs(opplay);
myPlayer.play();
opplay.addEventListener("ended",function(e)
{
e.preventDefault();
var c = parseInt(this.getAttribute("datacount"))+1;
if(c < 3)
{
opplay.src = stropsrc[c];
AttrObj.datacount = c;
videojs.setAttributes(opplay,AttrObj);
myPlayer = videojs(opplay);
myPlayer.play();
}
else//end
{
/*reset*/
opplay.src = stropsrc[0];
AttrObj.datacount = 0;
videojs.setAttributes(opplay,AttrObj);
/*hide*/
var divContainer = document.getElementById("divop");
divContainer.style.display = "none";
divContainer.style.visibility = "hidden";
var divOP = document.getElementById("op0");
divOP.style.display = "none";
divOP.style.visibility = "hidden";
}
});
Это ожидаемое поведение - вы установите тайм-аут на '0', поэтому он выполняется немедленно. Что вы ожидаете? –
@RoryMcCrossan Я хочу, чтобы drawConfig вызывается после завершения doPlaySequence (воспроизведение видео заканчивается), но оно вызывается сразу. –
Не могли бы вы добавить код 'doPlaySequence()' на ваш вопрос. –