lif*_*oop 5 javascript youtube ajax youtube-javascript-api
你好,所以我已经实现了 Youtube Player API,并且根据我正在做某些事情的事件,它在视频播放或暂停时完美工作,但是当视频结束时,永远不会调用结束事件,而是它回忆暂停的事件。我使用从网址栏获取视频的网址,这工作得很好。
<script>
function get(name){
if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search))
return decodeURIComponent(name[1]);
}
//Load player api asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: get('url'),
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerReady(evt) {
// evt.target.playVideo();
}
function onPlayerStateChange(evt) {
if (evt.data == YT.PlayerState.PLAYING) {
$.ajax({ url:'insertToDBFromVid.php',
data: {action : 'playing' },
type: 'post',
done: function(result){
alert(result);
console.log("Success, Playing");
},
error: function(result){
alert(result)
console.log("Error in Playing");
}});
}
if (evt.data == YT.PlayerState.ENDED){
//done=true;
//console.log("Ended called!");
$.ajax({ url:'insertToDBFromVid.php',
data: {action : 'ended' },
type: 'post',
done: function(result){
alert(result);
console.log("Success, Ended");
},
error: function(result){
alert(result)
console.log("Error in Ended");
}});
}
if (evt.data == YT.PlayerState.PAUSED) {
$.ajax({ url:'insertToDBFromVid.php',
data: {action : 'paused' },
type: 'post',
done: function(result){
alert(result);
console.log("Success, Paused");
},
error: function(result){
alert(result)
console.log("Error in Paused");
}});
}
}
function stopVideo() {
player.stopVideo();
}
Run Code Online (Sandbox Code Playgroud)
如果有人能解释为什么会发生这种情况,我们将不胜感激:)
我对 YouTube API 有很多不满,您遇到的问题就是其中之一:)
来自 YouTube API 文档:https://developers.google.com/youtube/iframe_api_reference#Playback_controls
重要提示:与使播放器处于暂停(2)状态的pauseVideo函数不同,stopVideo函数可以将播放器置于任何非播放状态,包括结束(0)、暂停(2)、视频提示(5)或未启动 (-1)。
因此,如果您使用player.stopVideo()
,状态可能会更改为报价中列出的任何状态。
解决方法是不使用stopVideo()
而是使用:
player.seekTo( player.getDuration(), true );
player.playVideo(); //Can be ommitted if video is already playing
Run Code Online (Sandbox Code Playgroud)
YouTube 播放器似乎总是将状态更改为ENDED
播放器自然结束。所以上面的解决方法是寻找视频到视频的结尾,然后播放视频,这样视频就会自然结束。
归档时间: |
|
查看次数: |
1307 次 |
最近记录: |