我想要在页面上加载一个youtube剪辑,并且除了这个剪辑之外,我还想添加一个顶层(HTML)层,它的工作方式有点像youtube自己的注释功能。
在项目符号中:-用户将看到一个YT剪辑(可能在自定义播放器中)-根据剪辑的当前时间,我需要JS在剪辑顶部的图层上加载信息。
因此:例如,从0.00到0.05,您在剪辑顶部看到一段文本,从0.05到0.30,没有文本,从0.30到0.37,依此类推
你有什么想法来解决这个问题吗?我意识到Youtube的Player API具有getCurrentTime的功能,但是我如何继续编写一段JS,以便在剪辑顶部的div层上“播放”该剪辑呢?
发布于 2011-09-05 18:48:48
实现这一点的方法实际上是使用yt上的getCurrentTime方法,具体地说,就是在setInterval的帮助下在重复函数中调用它。
你需要保留一个你想要呈现的覆盖图数组,以及from和to time,类似于:
var overlays = [
{text:"Some text",from:1,to:6},
{text:"Some other text",from:8,to:14}];然后,您将需要几个函数来处理电影的播放和停止(或暂停)。
var watchId;
function startWatch(){
watchId = setInterval( function(){
showOrHideOverlay(ytplayer.getCurrentTime());
},1000)
}
function stopWatch(){
clearTimeout(watchId);
}您将注意到,它使用了一个变量ytplayer,根据jsapi documentation,可以使用以下代码获取该变量:
var ytplayer ;
function onYouTubePlayerReady(playerId) {
ytplayer = document.getElementById("myytplayer");
ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}请注意,在其中我附加了一个事件侦听器,这将引导我们找到一个处理电影状态更改的方法
function onytplayerStateChange(newState) {
if(newState == 1){ // playing
startWatch()
}
else if(newState == 0 || newState == 2){ //ended or paused
stopWatch();
}
}因此,拼图的最后一块实际上是处理一个“滴答”,我设置为每秒发生一次。此方法showOrHideOverlay如下所示:
function showOrHideOverlay(time){
// find overlays which should be visible at "time"
var shownOverlays = false;
for(var i=0;i<overlays.length;i++){
if(overlays[i].from < time && overlays[i].to > time){
$('#overlay').text(overlays[i].text);
shownOverlays = true;
}
}
if(!shownOverlays)
$('#overlay').text("");
}最后是一个活生生的例子:http://jsfiddle.net/zTZjU/ (只需按下剪辑上的play )
发布于 2012-03-18 00:21:03
检查这个小提琴:http://jsfiddle.net/rEeJS/
我添加了wmode="transparent"以允许覆盖显示在Chrome中。
https://stackoverflow.com/questions/7298341
复制相似问题