理解这种模式:videojs("videoPlayer", {}, function(){}

Understanding this pattern: videojs("videoPlayer", {}, function(){}

我是最近从星球 Flex/Actionscript 来的难民,我仍在研究基础知识,所以这可能是一个非常简单的问题。我对下面的行感到困惑:

videojs("videoPlayer", {}, function(){}

虽然我用的很成功(下),但我不是很了解。它似乎是在指示全局 videojs 对象使用可选参数({})查找 id "videoPlayer" 的实例,然后在该实例上调用匿名函数。

我说得对吗?引起我困惑的是可选参数( {} )。我可以用它来传递 srcposter 并跳过该函数吗?这种模式有名字吗?它很常见吗?

如果这是重复的,请随意对我大喊大叫...


上下文: 我正在构建一个桌面应用程序,使用 Electron 来托管 Timeline.js,我可以在其中访问和显示本地 .mp4 文件。 Timeline.js 使用 iFrame 作为 "include anything you want" 选项,因此我有一个 "video.html" 文件作为 iFrame 的源。在时间线的 JSON 中,我使用查询字符串将参数传递给 Video.js

的 iFrame
<script>
    function getParamValue(paramName) {
        var url = window.location.search.substring(1); 
        var qArray = url.split('&');
        for (var i = 0; i < qArray.length; i++) {
            var pArr = qArray[i].split('=');
            if (pArr[0] == paramName)
                return pArr[1];
        }
    }

    // grap the video & poster frame refs from url
    var videoSrc = getParamValue('videoSrc');
    videoSrc = "assets/videos/" + videoSrc;

    var poster = getParamValue('poster');
    poster = "assets/images/" + poster;

    videojs("videoPlayer", {}, function(){
           this.src(videoSrc);
           this.poster(poster);
           this.load();
    });

</script>

摘自我的 Timeline.js JSON

"media": {
        "caption": "caption",
        "credit": "",
        "url": "<iframe allowfullscreen 
                        webkitallowfullscreen
                        src='video.html?videoSrc=Z.mp4&poster=W.jpg'
                        width='320' height='240'></iframe>", 
         },

这一切都取决于 videojs 的实现。

second {} parameter 是一个 'empty object',但如果需要,您可以传入额外的参数。

third parameter(你有匿名函数的地方)是在 videojs 加载和初始化后 运行 的一个函数。

这一切都在视频 js 文档中进行了解释,但由于您是 javascript 新手,我很宽容,因为 'an empty object {}' 对您来说可能是新概念,事实上 javascript 文件需要时间来异步加载,当然它们的代码也需要时间来初始化,因此在优秀的 3rd 方库中通过传入函数来实现 'run this code when initialised' 行为是很常见的。

所以,是的,这是用于初始化第 3 方 javascript 库的相当常见的实现 'pattern',但我认为它没有特定的名称。

可以,可以用第二个参数代替第三个参数的"ready function",例子:

videojs("videoPlayer", { src: videoSrc, poster: videoPoster, preload: true } });

播放器准备就绪!

只是一个简单的提示:

您可以使用以下方法编写视频源:

src: "http://www.example.com/path/to/video.mp4"

src: { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" } 

src: [
  { type: "video/mp4", src: "http://www.example.com/path/to/video.mp4" },
  { type: "video/webm", src: "http://www.example.com/path/to/video.webm" },
  { type: "video/ogg", src: "http://www.example.com/path/to/video.ogv" }
]

第二个使 videojs 引擎检查它是否支持播放该文件变得容易。

如果播放器的浏览器不支持该文件,则最后一个播放器有机会播放另一种文件类型。

祝你好运,玩得开心:-)