编辑 – 2016-06-25
(我删除了我的6月16日更新,因为不再相关.
我把OP留在了……)

今天我又花了4个小时.
这是现在的情况:

我的函数适用于两个链接.
视频参数在数组中定义.
另外两个链接不起作用.

我得到一个Uncaught TypeError:thisPlayer.loadVideoById不是链接#3和#4的函数.
但是相同的功能对链路#1和#2有效.

似乎youtube对象仅为两个第一个定义.
为什么?

请关闭此实时链接上的控制台:https://www.bessetteweb.com/?p=youtube-video-test
我插入了很多console.log消息来说清楚.

这是我的实际代码:

// Global variable for the player
var player = [];
var statePlaying=false;

playerArr = [{
            linkID:"link0",divID:"player1",ytID:"5V_wKuw2mvI",// Heavy Metal playlist
            start:20,end:30
            },{
            linkID:"link1",divID:"player2",ytID:"u9Dg-g7t2l4",// disturbed
            start:10,end:20
            },{
            linkID:"link2",divID:"player3",ytID:"39b5v3-d6ZA",// Maiden
            start:30,end:40
            },{
            linkID:"link3",divID:"player4",ytID:"z8ZqFlw6hYg",// Slayer
            start:120,end:136
            }];

// This function gets called when API is ready to use
function onYouTubePlayerAPIReady() {

    // Binding events loop
    console.log("playerArr.length: "+playerArr.length);
    for(i=0;i<playerArr.length;i++){
        console.log("");
        console.log("onPlayerReady for loop ->i: "+i);

        var playButton = document.getElementById(playerArr[i].linkID);
        console.log("playButton.id: "+playButton.id);

        var thisArr = playerArr[i];
        console.log("playerArr[i] object (below): ");
        console.log(thisArr);

        playButton.addEventListener("click",function() {
            thisLinkID = $(this).attr("id").replace("link","");

            console.log("");
            console.log("------------------");
            console.log("Link #"+(parseInt(thisLinkID)+1)+" clicked.");
            console.log("------------------");

            var ytID = playerArr[thisLinkID].ytID;
            var start = playerArr[thisLinkID].start;
            var end = playerArr[thisLinkID].end;

            var thisPlayer = new YT.Player(playerArr[thisLinkID].divID);

            console.log("ytID: "+ytID);
            console.log("start: "+start);
            console.log("end: "+end);
            console.log("");

            console.log("Below are the google ads,blocked by AdBlocker.");

            $("#ytplayerModal").css({"display":"block"});
            $("#ytplayerModal").animate({"opacity":"0.7"},1000,function(){

                console.log("");
                console.log("player show()");
                $(".ytplayer").show();

                console.log("Youtube player object:");
                console.log(thisPlayer);
                console.log("");
                console.log('loadVideoById() parameters --\> videoId:'+ytID+',startSeconds:'+start+',endSeconds:'+end);

                thisPlayer.loadVideoById({'videoId':ytID,'startSeconds':start,'endSeconds':end});
                console.log("");
            });

            // Bugfix - Set Interval instead of listener
            setTimeout(function(){
                var IntervalCounter=0;
                listenerInterval = setInterval( function() {

                    var state = thisPlayer.getPlayerState();    //player[thisLinkID].getPlayerState();
                    var stateMsg;

                    switch (state){
                        case -1: stateMsg="unstarted"; thisPlayer.playVideo(); console.log("player["+thisLinkID+"]"); break;
                        case  0: stateMsg="ended"; break;
                        case  1: stateMsg="playing"; break;
                        case  2: stateMsg="paused"; break;
                        case  3: stateMsg="buffering"; break;
                        case  5: stateMsg="video cued"; break;
                        default: stateMsg="Undefined player state...";
                    }
                    console.log(state+" : "+stateMsg);

                    if(state==1){
                        statePlaying=true;
                    }

                    // Closes the modal
                    if((statePlaying) && (state==0)){
                    //if((statePlaying) && (stateObj.data==0)){
                        setTimeout(function(){
                            console.log("Closing Modal");
                            $(".ytplayer").css({"display":"none"});
                            $("#ytplayerModal").animate({"opacity":"0"},function(){
                                $("#ytplayerModal").css({"display":"none"});
                            });
                            statePlaying=false;
                        },500);
                        clearInterval(listenerInterval);
                        console.log("Interval loop stopped on video end.")
                    }

                    // Stop the interval at 1000... Endless instead!
                    IntervalCounter++;
                    if((IntervalCounter>999)&&(state!=1)&&(state!=2)&&(state!=0)){
                        clearInterval(listenerInterval);
                        console.log("Interval loop willingly stopped. Endless otherwise.")
                    }
                },10);
            },1100);    // Interval setTimeout
        });
    }
}

// Inject YouTube API script
var tag = document.createElement('script');
tag.src = "//www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag,firstScriptTag);

这是我的控制台日志的快照:

—————–
这是我原来的帖子 – 6月14日:

我已经花了6个小时.
(加1编辑这个问题!)

我有点调试它的最后4行.

问题是我得到没有控制台错误的提示.

概念:
我想将许多Youtube视频链接到文本链接.
用户想要的效果是能够在阅读文本时点击引文链接…以便能够确认引文.
该视频无法完全播放.

视频应以特定时间码开始,并以特定时间码结束.
奖金复杂性:所有这些都希望以模态视图样式显示.

对于一个视频,我的代码工作得非常快. See here.

我的代码基于this tutorial并且快速成功.

然后,这个工作……
我需要构建数组来处理多个视频.
对于链接ID,玩家ID,开始/结束的时间码……和听众!
好玩开始了!

就像说的那样,我大部分时间都花在这上面.
我总是遇到错误控制台错误作为清除(LOLLL)指南.

我对自己的工作感到满意……我认为这是正确的方向.
这几乎正​​在……

但这一次,没有错误! See here.(检查控制台!)

热点问题研究!没有错误?!?
我的手臂现在被砍掉了.
事实上,第一个节目,但视频没有开始……而第二个看起来完全迷失在阴霾中.

在控制台日志消息中,我看到onStateChange监听器的第一次出现,即-1(未启动).但是之后 ???它死了!
Arrgg!

我必须超越自己的骄傲……并将其作为StackOveflow上的一个问题.

总结

以上是DEVMAX为你收集整理的Javascript事件监听器从监听中退出(?)… Youtube API – 没有控制台错误全部内容。

如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

Javascript事件监听器从监听中退出(?)… Youtube API – 没有控制台错误的更多相关文章

  1. ios – 如何将PhoneGap调试控制台与CLI集成?

    我需要在config.xml中添加任何内容吗?

  2. 无法使用xCode 4.4启动控制台应用程序

    我有一个包含两个目标的项目–一个iOS应用程序和一个OSX控制台应用程序.后者是使用XcodeFile->NewTarget并选择“CommandLineTool”创建的.此控制台应用程序用于准备iOS应用程序所需的默认数据库–使用CoreData.这一直很好,直到我升级到MountainLion和xCode4.4.现在,当我尝试运行命令行工具时,我收到“无法启动–权限被拒绝”错误.我试过玩签名证

  3. ios – 链接点击监听器上的WKWebView?

    在WKWebView类中是否存在类似onLinkClickListener的东西?我试着谷歌搜索但没有发现任何东西,我也发现了一些关于simillar类型的stackoverflow的未解答的问题.我需要一个linkClickListener的原因是,当我点击链接并且页面尚未加载时,它不会加载网站.当页面加载了监听器时,我也可以创建一个花哨的加载屏幕.解决方法你可以这样做将WKNavigation

  4. 使用XCode进行调试时如何生成SIGINT?

    我的控制台应用程序捕获SIGINT,以便它可以正常退出.但是,在调试程序时按XCode中的CTRLC无效.我可以找到进程并使用终端窗口向我的进程发送SIGINT,但是我希望有一个更简单的解决方案,我可以在XCode中完成.解决方法调试器控制台的暂停按钮实际上会向您的应用发送SIGINT.如果您想让调试器将信号传递给您的应用程序,您可以执行以下操作:>按调试器的暂停按钮,等待调试控制台获得焦点>键入

  5. ios – 从应用程序扩展打印到控制台

    我一直在玩iOS8中的新自定义键盘应用程序扩展API,使用Swift作为我的首选语言.然而,我注意到的一件事是,println似乎并没有向控制台输出任何输出,大概是因为这些语句是在应用程序扩展中执行而不是包含应用程序.有没有人找到一种方法从应用程序扩展中将语句打印到控制台?

  6. 多个监听器用于委托iOS

    我有一个带有代理didSelectString的类搜索栏.我有一个实现委托的A类和一个实现委托的B类.但是只有来自A类的代理才被执行.代表可以有多个监听器吗?并且如何实现这一点解决方法该委托是单一消息传递协议.如果要发送更改的多个对象,则需要使用NSNotifications.您可以使用通知中心传递对象,如下所示:想要收听通知时并设置选择器

  7. 为什么Xcode 8(iOS 10)在控制台中打印[LogMessageLogging]

    为什么Xcode8打印[LogMessageLogging]在控制台中,当我调用地图视图时?任何人都可以提出一些建议吗?解决方法PrivacyTheunifiedloggingsystemconsidersdynamicstringsandcomplexdynamicobjectstobeprivate,anddoesnotcollectthemautomatically.Toensuretheprivacyofusers,itisrecommendedthatlogmessagesconsiststri

  8. ios – 如何使用lldb expr(DEBUGGING控制台)在运行时设置UIView的框架

    我正在尝试以下方法我越来越我正在使用XCode6.1,LLDB版本lldb-320.4.152解决方法好的,这是一种有效的方法

  9. Xcode控制台中的“Some”关键字是什么意思?

    打印对象的描述会使lldb在对象的描述前面使用关键字“Some”:这个关键字是什么意思;为什么会这样?解决方法Optional是包含两个案例的枚举,none和some:如您所见,Optional可以具有Some值,具有关联值或None.Optional.None实际上是nil的意思.在这种情况下,调试器告诉您someString是一个Optional(a.k.a.String?),其值为Optional.some.它不是Optional.None,因此它不是零.在Swift3之前,这些案例都是大写的,So

  10. Swift学习笔记五——在Background中启用控制台Console Output模式

    在之前的介绍中可以知道,使用Xcode中的background来学习Swift是非常强大的,可以在右侧的界面中实时预览代码中的所有常量或者变量的值,非常方便。但是现在我们学习的Swift应该作为一种控制台程序出现,就像初学C,OC一样。所有代码的打印结果都可以在Console控制台中显示,以区别之前的所有参数值都显示在一起的情况。但是默认打开Background是没有所谓的控制台的。下面简述打开Background的方法。打开Xcode,选择View-->AssistantEditor-->ShowAss

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部