[英]Create/delete element inside newly created video element
I am creating a new video element and then wants to show a spinner when video has started loading until it gets the first frame and then delete that element. 我正在创建一个新的video元素,然后想在视频开始加载时显示微调框,直到它获得第一帧,然后再删除该元素。 Following is my code -
以下是我的代码-
var videoElem, src;
videoElem = document.createElement("video");
videoElem.src = src;
var preloader = '<div class="preloader-wrapper"><div class="spinner-layer"><div class="circle-clipper left"><div class="circle"></div></div>' + '<div class="gap-patch"><div class="circle"></div></div><div class="circle-clipper right"><div class="circle"></div></div></div></div>';
//renders when video has started loading - show preloader
videoElem.addEventListener("loadstart", function () {
console.log("Video has started loading...!");
//jQuery(preloader).insertBefore(videoElem); //works fine but I don't know how to delete the preloader in the loadeddata eventlistener
videoElem.appendChild(preloader);
});
//renders when is loaded - delete preloader
videoElem.addEventListener("loadeddata", function () {
console.log("Video has loaded successfully!");
videoElem.removeChild(preloader);
});
The appendChild
and removeChild
is not working. appendChild
和removeChild
不起作用。 Gives error : 给出错误:
Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node' at HTMLVideoElement.eval
未捕获的TypeError:无法在“节点”上执行“ removeChild”:HTMLVideoElement.eval上的参数1不是“节点”类型
You need to parse your string to an HTML Node
in order to append it to another HTML Nodes
. 您需要将字符串解析到
HTML Node
,以便将其附加到另一个HTML Nodes
。
You can do it with DOMParser : 您可以使用DOMParser做到这一点:
var preloader = new DOMParser().parseFromString('<div class="preloader-wrapper"><div class="spinner-layer"><div class="circle-clipper left"><div class="circle"></div></div>' + '<div class="gap-patch"><div class="circle"></div></div><div class="circle-clipper right"><div class="circle"></div></div></div></div>', 'text/html');
I have got the solution. 我有解决方案。 I was trying to use
removeChild(preloader)
. 我试图使用
removeChild(preloader)
。 Preloader here returns the whole html element. Preloader在这里返回整个html元素。 Therefore, by removing it by id solved my problem.
因此,通过id将其删除解决了我的问题。 Also, preloader element adding inside a video tag is wrong approach and would not show the loader.
另外,在视频标签内添加预加载器元素是错误的方法,并且不会显示加载器。 For this, I took the id of main div element and then added/removed the preloader as follows -
为此,我获取了主div元素的ID,然后按如下所示添加/删除了预加载器-
var videoLoader = '<div id="videoLoader" class="preloader-wrapper"><div class="spinner-layer"><div class="circle-clipper left"><div class="circle"></div></div>' + '<div class="gap-patch"><div class="circle"></div></div><div class="circle-clipper right"><div class="circle"></div></div></div></div>';
var parentDiv = document.getElementById('parentDiv');
parentDiv.insertAdjacentHTML('afterbegin',videoLoader); // add in loadstart listener
parentDiv.removeChild(document.getElementById('videoLoader')); //add in loadeddata listener
Output of elements is as follows - 元素的输出如下-
<div id="parentDiv">
<div id="videoLoader">..preloader..</div>
<video>...</video>
</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.