我想用JsViews播放html5视频内容,如下所示:
HTML:
<div id="result"></div>
<script id="myTmpl" type="text/x-jsrender">
<video autobuffer controls data-link="muted{:muted}">
<source id="mp4" data-link="src{:src}" type="video/mp4">
</video>
<button id="muted">change muted</button>
</script>
JS:
var data = {
src: "http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4",
muted: true
};
var myTmpl = $.templates("#myTmpl");
myTmpl.link("#result", data);
$("#result").on("click", "#muted", function () {
$.observable(data).setProperty("muted", !data.muted);
});
可以看到默认处理的属性muted
看起来像muted=true
或muted=false
,但在HTML specifications中 - 属性&#34;静音&#34;可能会也可能不会。也就是说,应该在disable
处理{{1}}的属性:<{3}}。
也许有一些方法可以在jsviews中自定义(替换)标准的html属性处理程序?
答案 0 :(得分:1)
您可以在muted
为false
时删除默认属性,写一下:
<video autobuffer controls data-link="muted{:muted||null}">
然而,由于动态删除或添加静音属性实际上不会使视频控件静音/取消静音,因此无法按预期工作。为此,您需要将静音元素上的静音属性设置为true / false。
此外,当用户点击视频元素UI上的内置静音控件时,您希望它能够显着修改您的muted
数据属性。所有这些都可以使用以下代码:
var video = $("video");
$.observe(data, "muted", function(ev, eventArgs) {
video[0].muted = eventArgs.value;
})
video.on("volumechange", function() {
$.observable(data).setProperty("muted", video[0].muted);
});
以下是jsfiddle的更新版本,其中包含更改:http://jsfiddle.net/ck9sr49L/3/。
我打算在下一个JsViews中添加一个新功能,以便能够选择数据链接到HTML元素的属性,而不是相应的属性。语法为data-link="prop-muted{:...}"
(类似于数据链接到CSS属性data-link="css-muted{:...}"
)。通过该更新,您将能够简化并编写以下内容:
模板:
<video autobuffer controls data-link="prop-muted{:muted}">
<source id="mp4" data-link="src{:src}" type="video/mp4"/>
</video>
<label>Muted: <input type="checkbox" data-link="muted"/></label>
代码:
var data = {
src: "http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4",
muted: true
};
var myTmpl = $.templates("#theTmpl");
myTmpl.link("#result", data);
$("video").on("volumechange", function(ev) {
$.observable(data).setProperty("muted", ev.target.muted);
});