2017-02-08 20 views
0

divオーバーレイ内のiframeに動画を開始する動画プレーヤーで作業しています。私はすべてのリンクでonclick =()のような繰り返しコードを避け、jQueryのような外部ライブラリを避けたいのですが、私のビデオウィンドウが起動したときにjQueryが不快なちらつき画面を生成するからです。show div fromクラス名pure javascript

私の問題は、これまでの作業では、最初のリンクだけがビデオオーバーレイを開くことです。私は(幾分)[0]は配列の最初の要素を示していることを理解しています。配列に無限の数値範囲を含めることができますか、ここで私の目標を達成する良い方法がありますか?これらのギャラリーには何千ものビデオが潜在的に存在しますので、スクリプトに一度に1つずつリストすることは現実的ではありません。

私はまだ勉強に苦しんでいますので、実際の例は非常に高く評価されます。おかげ

私の仕事、これまで

https://jsfiddle.net/4oomb9rt/

のコード例

<!doctype html> 
<html> 
<head> 
<title>Video Overlay</title> 
<style> 
body { 
    margin: 0; 
    font-family: arial; 
} 
#vidPlayer { 
    height: 100%; 
    width: 100%; 
    position: fixed; 
    z-index: 1; 
    top: 0; 
    left: 0; 
    background-color: #000; 
    overflow: hidden; 
    transition: 0.5s; 
    display: none; 
    color: white; 
} 
.closebtn { 
    position: absolute; 
    top: 7px; 
    right: 7px; 
    font-size: 50px; 
} 
.openbtn { 
    font-size: 30px; 
} 
.openbtn, .closebtn { 
    max-height: 48px; 
    max-width: 48px; 
    min-height: 48px; 
    min-width: 48px; 
    border-radius: 7px; 
    line-height: 12px; 
} 
.vidContent { 
    width: 100%; 
    text-align: center; 
    font-size: 32px; 
} 
</style> 
</head> 
<body> 
<div id="vidPlayer"> 
<button class="closebtn">&times;</button> 
<div class="vidContent">vidplayer content</div> 
</div> 
<button class="openbtn">&#9776;</button> 
<button class="openbtn">&#9776;</button> 
<button class="openbtn">&#9776;</button> 
<script> 
function openNav() { 
document.getElementById("vidPlayer").style.display = "block"; 
} 
function closeNav() { 
document.getElementById("vidPlayer").style.display = "none"; 
} 
var opener = document.getElementsByClassName('openbtn')[0]; 
opener.addEventListener("click", function(e) { 
    openNav(); 
}, false); 
var closer = document.getElementsByClassName('closebtn')[0]; 
closer.addEventListener("click", function(e) { 
    closeNav(); 
}, false); 
</script> 
</body> 
</html> 

答えて

0

ClassNameを使用して要素を反復処理し、イベントリスナーを割り当てることができます。

for(var i=0;i<document.getElementsByClassName("openbtn").length;i++){ 
    document.getElementsByClassName("openbtn")[i].addEventListener("click", function(e) { 
     openNav(); 
    }, false); 
    } 

デモ:私が理解するための試みのためにみんなにhttps://jsfiddle.net/tj23hy3h/

+0

感謝。特に実例のMohdのおかげです。 –

0

あなたは正しい軌道に乗っています。あなたはあなたのjavascriptを少し変更したいと思う。

var openers = document.getElementsByClassName('openbtn'); 
    for(var i=0; i<openers.length; i++) { 
     openers[i].addEventListener("click", function(e) { 
      openNav(); 
     }, false); 
    } 
    var closers = document.getElementsByClassName('closebtn'); 
    for(var i=0; i<closers.length; i++) { 
     closers[i].addEventListener("click", function(e) { 
      closeNav(); 
     }, false); 
    } 

すべてのオープナーまたはクローザーを繰り返して、それぞれにリスナーを追加できます。あなたは問題だ何

0

は、あなたがこのような何かがうまくいくように、そのタイプのすべての要素にあなたのイベントリスナーを追加する必要がありますということです。

var opener = document.querySelectorAll('.openbtn'); Array.from(opener).foreach(function(opener_single){ opener_single.addEventListener("click", openNav, false); });

、その後に同じ理論より近い要素。

私がここでやっているのは、クラス名がopenbuttonのすべての要素を取得していて、ループ内でそれらをループしています。openNav関数を実行するクリックイベントリスナーを適用しています。