javascript
  • video
  • createelement
  • 2017-09-27 16 views 0 likes 
    0

    新しいビデオ要素を作成していて、最初のフレームが取得されるまでビデオの読み込みを開始してからその要素を削除するまでスピナーを表示します。以下の私のコードです -新しく作成されたビデオ要素内に要素を作成/削除する

    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); 
    }); 
    

    appendChildremoveChildが機能していません。エラーを与える:

    あなたが別の HTML Nodesにそれを追加するために、 HTML Nodeにあなたの文字列を解析する必要が

    Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node' at HTMLVideoElement.eval

    答えて

    0

    あなたは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'); 
    
    +0

    は ' 'の実行に失敗しました - 次のように要素の

    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 

    出力がある - これは、次のような、私は、プリローダーをメインdiv要素のIDを取った後、追加/削除しましたappendChild on 'Node': '#document'タイプのノードは、 'VIDEO'タイプのノード内に挿入されない可能性があります。 ' –

    +1

    @Liz。それをビデオノードの子として挿入するのではなく、 'insertBefore()'または 'insertAfter()'を使ってみてください。これらのメソッドの詳細については、こちらをご覧ください(https://developer.mozilla.org/en-US/docs/Web/API/Node/insertBefore)。 'DOM'の位置に挿入した後、ビデオノードの上に置きます。 –

    +0

    リンクを共有してくれてありがとう。それは私を助けた –

    0

    私は解決策を持っています。 removeChild(preloader)を使用しようとしていました。プリローダーはHTML要素全体を返します。したがって、それを削除することで、私の問題を解決した。また、ビデオタグ内に追加するプリローダー要素は間違ったアプローチであり、ローダーを表示しません。

    そのエラーを与える
    <div id="parentDiv"> 
        <div id="videoLoader">..preloader..</div> 
        <video>...</video> 
    </div> 
    
    関連する問題