This fiddle显示了两个HTML5 video
元素,这两个元素都是通过不同的方式创建的,但两者在功能方面都是相同的(两者都有控件,当它们准备就绪时自动播放,当他们结束时玩,并且最初是静音的)。
第一个是使用HTML创建的,第二个是使用JS创建的。
<video controls autoplay loop muted>
<source src="http://techslides.com/demos/sample-videos/small.mp4" />
</video>
function Main() {
this.video = document.createElement("video");
this.video.src = "http://techslides.com/demos/sample-videos/small.mp4";
this.video.controls = true;
this.video.autoplay = true;
this.video.loop = true;
this.video.muted = true
document.body.appendChild(this.video); /* Append to the body */
}
var main = new Main();
我的问题涉及以下问题:我正在查看HTML5 Rocks中的这段代码,用作我如何在视频元素上指定多个源文件的示例(因此,例如,浏览器将根据支持的格式播放视频文件。在这种特殊情况下,指定了两个source
元素。
<video controls>
<source src="devstories.webm" type='video/webm;codecs="vp8, vorbis"'/>
<source src="devstories.mp4" type='video/mp4;codecs="avc1.42E01E, mp4a.40.2"'/>
</video>
我知道我可以为使用HTML创建的video
元素添加其他来源。例如,这个视频元素有两个源,第一个带有OGV文件,第二个带有MP4文件:
<video controls autoplay loop muted>
<source src=".../foo.ogv" type="video/ogg"/>
<source src=".../foo.mp4" type="video/mp4"/>
</video>
我可以这样做,但使用JS创建HTML5视频元素吗?
答案 0 :(得分:1)
是的,可以做到。
我可以使用createElement()
方法创建我想要的source
元素,然后使用video
方法将它们附加到appendChild()
元素。
所以,我将修改我发布的original fiddle中的JS代码,用JS创建一个video
元素,其特点是:
实际上,一个类似于我的video
元素的元素有两个来源,用HTML创建并在问题中定义:
<video controls autoplay loop muted>
<source src=".../foo.ogv" type="video/ogg"/>
<source src=".../foo.mp4" type="video/mp4"/>
</video>
我继续修改创建的video
元素,丢弃src
属性,但保留我定义的所有其他属性:
/* Video element creation */
this.video = document.createElement("video");
/* Video element properties settings */
this.video.controls = true;
this.video.autoplay = true;
this.video.loop = true;
this.video.muted = true;
要添加源代码,我使用source
方法创建createElement()
元素,稍后我设置source将拥有的属性,最后我使用方法appendChild()
追加源元素到video
元素。在这里,我为OGV文件创建了源元素。
/* First source element creation */
this.source1 = document.createElement("source");
/* Attribute settings for my first source */
this.source1.setAttribute("src", ".../foo.ogv");
this.source1.setAttribute("type", "video/ogg");
/* Append the first source element to the video element */
this.video.appendChild(this.source1);
我可以添加多个源,因此对于这个问题,因为我想添加两个源,一个OGV文件和一个MP4文件,我将添加两个。我继续为第二个元素创建source
元素。
/* Second source element creation */
this.source2 = document.createElement("source");
/* Attribute settings for my second source */
this.source2.setAttribute("src", ".../foo.mp4");
this.source2.setAttribute("type", "video/mp4");
/* Append the second source element to the video element */
this.video.appendChild(this.source2);
当我完成将源元素添加到我的video
元素时,唯一要做的就是将视频元素附加到带有appendChild()
的HTML正文:
document.body.appendChild(this.video);
对于回答代码,我将首先放置video
元素,其中包含两个源,使用HTML创建并在问题中定义,以进行比较。我添加了<hr>
休息时间,仅仅是出于审美原因。
<video controls autoplay loop muted>
<source src="http://techslides.com/demos/sample-videos/small.ogv" type="video/ogg" />
<source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4" />
</video>
<hr/>
<!--
As the video element created with JS is appended to the body,
it will be located here, at the end of that body.
-->
function Main() {
this.video = document.createElement("video");
this.video.controls = true;
this.video.autoplay = true;
this.video.loop = true;
this.video.muted = true;
this.source1 = document.createElement("source");
this.source1.setAttribute("src",
"http://techslides.com/demos/sample-videos/small.ogv");
this.source1.setAttribute("type", "video/ogg");
this.video.appendChild(this.source1);
this.source2 = document.createElement("source");
this.source2.setAttribute("src",
"http://techslides.com/demos/sample-videos/small.mp4");
this.source2.setAttribute("type", "video/mp4");
this.video.appendChild(this.source2);
document.body.appendChild(this.video);
}
var main = new Main();
在this new fiddle中,您可以看到所有代码。