2016-04-17 13 views
2

こんにちは私はimgに異なるプロパティがあるたびにdivに何回もimgを挿入しようとしています。私のHTMLコードは、ID_DIVと呼ばれるサンプルIDを持つdivを持ちます。 このimg position absoluteのようなhtmlコードにスタイルセクションがあります。javascript - ループを使ってdivに複数のimgを挿入する方法

私はdivに必要なimgの数に応じて変数NumberOfTimesをプリセットします。

しかし、私はループを動作させることができません。ブラウザをリフレッシュするたびにimgは別の位置に表示されますが、「NumberOfTImes」と表示されることはありません。 これに私のコードを編集しました。しかし、ループはとにかく動作しません。それが何であるかまだわからない。

function generateImg(){ 
    var numberOfTimes=prompt("how many times?"); 
    var div_id1=document.getElementById("div_id1"); 
    do{ 
    var oImg=document.createElement("img"); // Creates an oimg node 
    oImg.setAttribute('src', 's0me_s0urce'); // sets the source for img file 
    div_id1.appendChild(oImg); // append the img to #id Div.   
    document.querySelector('img').style.top = Math.floor(Math.random()*401)+'px'; 
    document.querySelector('img').style.left = Math.floor(Math.random()*401)+'px'; 
    numberOfTimes--; 
}while(numberOfTimes>0); 
} 

お願いします。私はこの論理の誤りがどこにあるのか分かりません。

+0

コンソールにエラーメッセージがありますか?あなたのコードは正常に動作するはずです。ソース "s0me_s0urce"を "s0me_s0urce.Extension"にチェックし、各繰り返しのnumberOfTimesの値を確認してください。 – Atiqur

+0

これは間違ったロジックだったdocument.querySelector( 'img')でした。代わりに私はoImg(変数)を使用していました。 –

+0

画像が重なることがあるので注意してください。可能な解決策については、http://stackoverflow.com/a/36673274/1636522を参照してください。 – leaf

答えて

0

"i"をループ外に宣言する必要があります。それ以外の場合はデクリメントされず、 "NumberOfTimes - 1"になります。したがって、ループは同じ場所の画像でループを繰り返します。これは、「NumberOfTimes」が同じスコープ内にあり、最初に使用されることを前提としています。私は "i"の位置を移動し、ループ内でそれに減分を加えたことに注意してください。

function RandomPositionImgs(){ 
var i=NumberOfTimes; 
    do{ 
    var oImg=document.createElement("img"); // Creates an oimg node 
    oImg.setAttribute('src', 'some_source'); // sets the source for img file 
    document.getElementById("ID_DIV").appendChild(oImg); // append the img to leftSide Div. 
    document.querySelector('img').style.top = Math.floor(Math.random()*401)+'px'; // random positioning 
    document.querySelector('img').style.left = Math.floor(Math.random()*401)+'px'; // random positioning 
    i--; 
}while(i>0); 
} 
1

私の答えは廃止されました。とにかく、ここでは重複した画像に対処する方法です:

var img, i, x, y; 
 
var size = 48, w = 5, h = 3; 
 
var grid = new Array(w * h).map(x => false); 
 
var n = 5; // n > grid.length => infinite loop 
 
var src = 'https://i.stack.imgur.com/6gwfY.gif?s=48&g=1'; 
 
var ct = document.getElementById('ct'); 
 

 
ct.style.width = size * w + 'px'; 
 
ct.style.height = size * h + 'px'; 
 

 
while (n-- > 0) { 
 
    i = next(), x = i % w, y = (i - x)/w; 
 
    img = document.createElement('img'); 
 
    img.setAttribute('src', src); 
 
    img.style.left = size * x + 'px'; 
 
    img.style.top = size * y + 'px'; 
 
    ct.appendChild(img); 
 
} 
 

 
function next() { 
 
    var l = grid.length; 
 
    var i = Math.floor(Math.random() * l); 
 
    // as long as this position is not free, try the next one 
 
    while (grid[i]) i = (i + 1) % l; 
 
    return grid[i] = true, i; 
 
}
img{position:absolute} 
 
#ct{background:#eee} 
 
#ct{position:relative}
<div id="ct"></div>

+0

ありがとうございます。私は実際に私のコード問題を視覚化するのに役立つあなたの時間をappretiate。あなたがこの質問でさらに私を助けることができたら、私はとても嬉しく思います。ありがとうございます。 http://stackoverflow.com/questions/36683158/javascript-onclick-event-should-trigger-a-function-and-its-not-working –

0

はあなたが私が私が間違って何をしていたか実感しましたあなたの答えありがとうございました。これは私があなたのコメントの後に行った正しいコードです。

function generateImgs(){ 
    var numberOfTimes=prompt("how many times?"); 
    for(i=0;i<numberOfFaces;i++){ 
    var oImg=document.createElement("img"); // Creates an oimg node 
    oImg.setAttribute('src', 'valid source'); // sets the source for img file 
    document.getElementById("div id").appendChild(oImg); // append the img to Div. 
    oImg.style.top = Math.floor(Math.random()*401)+'px'; 
    oImg.style.left = Math.floor(Math.random()*401)+'px'; 
} 
} 
関連する問題