Javascript HTML5视频播放事件未触发
我目前在Safari中有一个HTML5视频事件问题。我正在我的页面上播放一个视频。视频加载和播放正确。但是,游戏事件并不总是触发。如果用户:Javascript HTML5视频播放事件未触发,javascript,html,video,safari,dom-events,Javascript,Html,Video,Safari,Dom Events,我目前在Safari中有一个HTML5视频事件问题。我正在我的页面上播放一个视频。视频加载和播放正确。但是,游戏事件并不总是触发。如果用户: 点击播放 将视频观看到底(已结束事件) 再次单击播放 第二次单击不会触发播放事件。如果我当时暂停/播放电影,就会触发正确的事件 如果视频已完成且用户再次按下播放,我如何使视频标签的播放事件触发 调用drawVidPlayer时,视频索引是页面渲染的一部分 function drawVidPlayer(vindex){ var turl=vidLis
function drawVidPlayer(vindex){
var turl=vidList[vindex]['thumbUrl'];
var vurl=vidList[vindex]['url'];
var valias=vidList[vindex]['type'];
destroyVidPlayer();
$('#mediaspot').css('backgroundColor', '#000000');
$('#mediaspot').show();
$('#mediaspot').html('<video controls="controls" id="twnvideo" poster="'+turl+'" style="height:225px; width:460px;"><source src="'+vurl+'" type="video/ogg" /><source src="'+vurl+'" type="video/mp4" /><source src="'+vurl+'" type="video/webm" />Your browser does not support the video tag.</video>').appendTo('#wrap_media_vod');
var velem=document.getElementsByTagName('video')[0];
velem.addEventListener('play', initVidTimer, false);
velem.addEventListener('pause', killVidTimer, false);
velem.addEventListener('ended', killVidTimer, false);
}
function destroyVidPlayer(){
var velem=document.getElementsByTagName('video')[0];
if(velem!=undefined){
velem.removeEventListener('play', initVidTimer);
velem.removeEventListener('pause', killVidTimer);
velem.removeEventListener('ended', killVidTimer);
}
$('#mediaspot').empty();
$('#mediaspot').html('');
}
function initVidTimer(){
if(activityTimer==null){
external.OnUserActivity(19);
activityTimer=setInterval(function(){
external.WriteLog('activity timer running');
external.OnUserActivity(19);
}, 5000);
}
}
function killVidTimer(){
clearInterval(activityTimer);
activityTimer=null; // Kill keepAlive timer
var velem=document.getElementsByTagName('video')[0];
external.WriteLog(velem.ended);
}
功能drawVidPlayer(vindex){
var turl=vidList[vindex]['thumbUrl'];
var vurl=vidList[vindex]['url'];
var valias=vidList[vindex]['type'];
视频播放器();
$('mediapot').css('backgroundColor','000000');
$('#mediapot').show();
$(“#mediapot”).html('您的浏览器不支持视频标记').appendTo(“#wrap_media_vod”);
var velem=document.getElementsByTagName('video')[0];
velem.addEventListener('play',initVidTimer,false);
velem.addEventListener('pause',killVidTimer,false);
velem.addEventListener('end',killVidTimer,false);
}
函数名为vidplayer(){
var velem=document.getElementsByTagName('video')[0];
if(velem!=未定义){
velem.removeEventListener('play',initVidTimer);
velem.removeEventListener('pause',killVidTimer);
velem.removeEventListener('end',killVidTimer);
}
$('#mediapot').empty();
$('#mediapot').html('');
}
函数initVidTimer(){
如果(activityTimer==null){
外部活动(19);
activityTimer=setInterval(函数(){
external.WriteLog(“活动计时器正在运行”);
外部活动(19);
}, 5000);
}
}
函数killVidTimer(){
clearInterval(活动计时器);
activityTimer=null;//终止保留计时器
var velem=document.getElementsByTagName('video')[0];
外部写日志(velem.end);
}
现在指定,当播放位置到达媒体文件末尾时,浏览器必须抛出时间更新
、暂停
、和结束
事件,但规范并不总是那么清楚。因此,浏览器之间的这种行为是不一致的。有些人在文件结束时不设置paused=true
或触发paused
事件
在您的Safari版本中,当视频第二次开始播放时,paused
仍然等于false
,因此浏览器没有理由再次触发play
事件
这在Safari 6中可能不再是一个问题,但在IE 9中仍然存在。看看longtailvideo.com上的“结束事件”专栏——它们很好地概括了不一致之处
用几行代码就可以很容易地规范化这个问题-如下所示:
$("video").on("ended", function () {
if (!this.paused) this.pause();
});
这将使视频在end
上处于暂停状态,因此它将在回放时正确抛出play
事件
您可以在IE 9中尝试这个工作示例,或者看看我在这个JSFIDLE上的意思:我也有同样的问题,我用jquery解决了这个问题:
function videoend(){
var duration = $("video").get(0).duration;
var current = $("video").get(0).currentTime;
if(current==duration){
//Whatever you wanna do when video ends
};
}
$(document).ready(function(){
setInterval("videoend()", 200); //or any other time you wanna use
});
希望这有帮助