首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计时器与Youtube剪辑一起使用JS在不同的时间显示div

计时器与Youtube剪辑一起使用JS在不同的时间显示div
EN

Stack Overflow用户
提问于 2011-09-04 17:35:14
回答 2查看 1.3K关注 0票数 1

我想要在页面上加载一个youtube剪辑,并且除了这个剪辑之外,我还想添加一个顶层(HTML)层,它的工作方式有点像youtube自己的注释功能。

在项目符号中:-用户将看到一个YT剪辑(可能在自定义播放器中)-根据剪辑的当前时间,我需要JS在剪辑顶部的图层上加载信息。

因此:例如,从0.00到0.05,您在剪辑顶部看到一段文本,从0.05到0.30,没有文本,从0.30到0.37,依此类推

你有什么想法来解决这个问题吗?我意识到Youtube的Player API具有getCurrentTime的功能,但是我如何继续编写一段JS,以便在剪辑顶部的div层上“播放”该剪辑呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-05 18:48:48

实现这一点的方法实际上是使用yt上的getCurrentTime方法,具体地说,就是在setInterval的帮助下在重复函数中调用它。

你需要保留一个你想要呈现的覆盖图数组,以及from和to time,类似于:

代码语言:javascript
复制
var overlays = [
    {text:"Some text",from:1,to:6},
    {text:"Some other text",from:8,to:14}];

然后,您将需要几个函数来处理电影的播放和停止(或暂停)。

代码语言:javascript
复制
var watchId;
function startWatch(){
    watchId = setInterval( function(){
        showOrHideOverlay(ytplayer.getCurrentTime());
    },1000)
}

function stopWatch(){
  clearTimeout(watchId);
}

您将注意到,它使用了一个变量ytplayer,根据jsapi documentation,可以使用以下代码获取该变量:

代码语言:javascript
复制
var ytplayer ;
function onYouTubePlayerReady(playerId) {       
    ytplayer = document.getElementById("myytplayer");  
    ytplayer.addEventListener("onStateChange", "onytplayerStateChange");   
}

请注意,在其中我附加了一个事件侦听器,这将引导我们找到一个处理电影状态更改的方法

代码语言:javascript
复制
function onytplayerStateChange(newState) {    
    if(newState == 1){ // playing
         startWatch()
    }
    else if(newState == 0 || newState == 2){ //ended or paused
         stopWatch();   
    }            
}

因此,拼图的最后一块实际上是处理一个“滴答”,我设置为每秒发生一次。此方法showOrHideOverlay如下所示:

代码语言:javascript
复制
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 )

票数 2
EN

Stack Overflow用户

发布于 2012-03-18 00:21:03

检查这个小提琴:http://jsfiddle.net/rEeJS/

我添加了wmode="transparent"以允许覆盖显示在Chrome中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7298341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档