javascript - 没有视频,但我能听到声音 - knockout.js 与 video.js 的自定义绑定(bind)

标签 javascript knockout.js html5-video video.js

Codepen/jsfiddle

我有一个应用程序,它使用下一个/上一个按钮循环浏览一堆视频。我正在使用 knockout.js 来控制 UI,所以我创建了一个自定义绑定(bind)来初始化单个视频标签,然后当 knockout 移动到下一个视频时,它会更新一个包含 src 对象数组的可观察对象 {src :"", 输入:""}

Here is a codepen of the problem .在这里,第一个视频没有音频(这是预期的),但是如果您单击“下一步”并且打开了音频,您应该会听到一连串的哔哔声 - 这是第二个视频的预期音频。但是第一个之后就没有视频了。此外,如果您尝试返回到第一个,它也不起作用。

我已经在调试控制台中使用了它,在 customBinding 的“更新”方法中,视频对象似乎一切正常——它的源设置正确——但似乎没有一种方法能让我展示视频。

我不确定这是否是我在 knockout 绑定(bind)中做错了什么,或者我是否以某种方式误解了 video.js?

我的自定义绑定(bind)看起来像这样:

ko.bindingHandlers.video = {
  init: function(element, valueAccessor, allBindingsAccessor) {
    var videoSources = ko.utils.unwrapObservable(valueAccessor()).videos,
        playerId = allBindingsAccessor().playerId,
        options = { loop : true, controls: true, autoplay: true, preload: "auto" };

    videojs(playerId, options, function(){
        var video = this;
        video.src(videoSources).load().play();
    });
  },

  update: function(element, valueAccessor, allBindingsAccessor) {
    var videoSources = ko.utils.unwrapObservable(valueAccessor()).videos,
        playerId = allBindingsAccessor().playerId,
        video = videojs(playerId);

    video.pause().src(videoSources).load().play();
  }
};

和标记:

<div id="assessmentIntroPanel" data-bind="with: currentStep">
  <div data-bind="video: videos, playerId: 'videoPlayer'">
    <video id="videoPlayer" class="video-js vjs-default-skin" width="430" height="267">
    </video>
  </div>
</div>

有什么想法吗?

最佳答案

我遇到了同样的问题。

看起来,如果 Knockout 绑定(bind)删除了视频元素(即使是暂时的),它也会破坏它们。

这是通过确保“with”和“if”绑定(bind)不适用于视频来解决的。

对于您的代码,这意味着:

<div id="assessmentIntroPanel" data-bind="with: currentStep">
  <div data-bind="video: videos, playerId: 'videoPlayer'">

  </div>
</div>
<video id="videoPlayer" class="video-js vjs-default-skin" width="430" height="267">
</video>

所以你的 UI 会更复杂......但现在视频元素永远不会被删除,它应该可以工作。

关于javascript - 没有视频,但我能听到声音 - knockout.js 与 video.js 的自定义绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18899860/

相关文章:

javascript - 对未定义结果执行的方法(来自 promise 解析的方法)

iPhone 上的 HTML5 视频元素有边框

javascript - 我的 Google map 测距仪无法与 SSL 正常工作

javascript - i18next 单一翻译字符串回退/默认(Vue JS)

javascript - Knockout + Ajax Content 导致多个绑定(bind)错误

javascript - 在 table 或 div 元素上使用 hasFocus 绑定(bind)

html - 如何将视频帧放入 WebGL 中的 GL 纹理?

HTML5 视频自动播放不起作用

相当于@SuppressWarnings的Javascript?

javascript - 使用来自ajax的knockout.js/mappingplugin/koExternal模板引擎/json进行条件绑定(bind)