Mik*_*ley 16
不确定你是否仍然需要一个答案(因为我在4个月后发现它)但是这是我用youtube的iframe嵌入api完成这个的方法.这很丑陋,因为它需要一个setInterval,但YouTube API中确实没有任何类型的"timeupdate"事件(至少在iframe API中没有),所以你必须通过每次检查视频时间来伪造它很经常.它似乎运行得很好.
比方说,你要启动您的播放器,如下所示与YT.Player(),并且要实现自己的onProgress()功能,只要视频的时间改变了被称为:
在HTML中:
<div id="myPlayer"></div>
Run Code Online (Sandbox Code Playgroud)
在JS中:
// first, load the YouTube Iframe API:
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// some variables (global here, but they don't have to be)
var player;
var videoId = 'SomeYoutubeIdHere';
var videotime = 0;
var timeupdater = null;
// load your player when the API becomes ready
function onYoutubeIframeAPIReady() {
player = new YT.Player('myPlayer', {
width: '640',
height: '390',
videoId: videoId,
events: {
'onReady': onPlayerReady
}
});
}
// when the player is ready, start checking the current time every 100 ms.
function onPlayerReady() {
function updateTime() {
var oldTime = videotime;
if(player && player.getCurrentTime) {
videotime = player.getCurrentTime();
}
if(videotime !== oldTime) {
onProgress(videotime);
}
}
timeupdater = setInterval(updateTime, 100);
}
// when the time changes, this will be called.
function onProgress(currentTime) {
if(currentTime > 20) {
console.log("the video reached 20 seconds!");
}
}
Run Code Online (Sandbox Code Playgroud)
这有点草率,需要一些全局变量,但你可以很容易地将它重构为一个闭包和/或使间隔停止并在播放/暂停时开始,同时在初始化播放器时包括onStateChange事件,并编写onPlayerStateChange检查播放和暂停的功能.您只需要从onPlayerReady中分离updateTime()函数,并在策略上调用timeupdater = setInterval(updateTime, 100);并clearInterval(timeupdater);在正确的事件处理程序中. 有关在 YouTube上使用活动的详情,请参阅此处.
| 归档时间: |
|
| 查看次数: |
8311 次 |
| 最近记录: |