2017-02-16 13 views
2

ハードコードされた "<div>"と "<img>"タグを使用して、同じサイズの背景イメージ(map.png)上にほとんど透明なイメージ(t01.png)をオーバーレイするhtml/javascriptドキュメントを作成しました。javascriptの動的イメージプレースメントがハードコードされたバージョンのように機能しないのはなぜですか?

ハードコードされたタグの代わりにjavascriptのcreateElementコマンドを使用して結果を複製したいが、表示されるページには、必要に応じてオーバーレイさせるのではなく、 。

動的イメージプレースメントをハードコードされたバージョンと同じにするには、何を変更する必要がありますか?

ハードコードされたバージョン:

<html> 
<head> 

<script LANGUAGE="JavaScript" type="text/javascript"> 
var iImage = 0; 
var imageFiles = ["./map.png","./t01.png"] 
var numImages = 2; 

function imageLoad() { 
    for(iImage = 0; iImage < numImages; iImage++) { 
    document.images[iImage].src = imageFiles[iImage]; 
    } 
} 
</script> 
</head> 

<body onLoad="imageLoad();"> 
    <div id="imageBox" STYLE="position: absolute; top:0px; height: 1px;"> 
     <div ID="frame0" STYLE="position: absolute; top: 0em; left: 0em;"> 
     <img src="./map.png" border="1"> 
     </div> 
     <div ID="frame1" STYLE="position: absolute;top: 0em; left: 0em;"> 
     <img src="./t01.png" border="1"> 
     </div> 
    </div> 
</body> 
</html> 

ダイナミック配置バージョン

<html> 
<head> 

<script LANGUAGE="JavaScript" type="text/javascript"> 
var iImage = 0; 
var imageFiles = ["./map.png","./t01.png"] 
var numImages = 2; 

function imageLoad() { 
    placeImage(); 
    for(iImage = 0; iImage < numImages; iImage++) { 
    document.images[iImage].src = imageFiles[iImage]; 
    } 
} 

function placeImage() 
{ 
    for(iImage = 0; iImage < numImages; iImage++) { 

    // Create div for this image. 
    var thisDiv = document.createElement("div"); 
    var thisDivID = "frame" + iImage; 
    thisDiv.id = thisDivID; 
    thisDiv.position = "absolute"; 

    // Create image. 
    var thisImage = document.createElement("img"); 
    thisImage.src=imageFiles[iImage]; 

    // Add this image to this div. 
    thisDiv.appendChild(thisImage); 

    // Add this div to the imageBox div. 
    document.getElementById("imageBox").appendChild(thisDiv); 

    } 
} 

</script> 
</head> 

<body onLoad="imageLoad();"> 
    <div id="imageBox" STYLE="position: absolute; top:0px; height: 1px;"></div>  
</body> 
</html> 

Background layer--map.png Mostly transparent layer--t01.png

+0

ハードコーディングされたバージョンは、 'frame0'の 'top'と 'left'と '0em'に 'frame1'を設定しているようです。私は動的版では 'thisDiv'に起こっていることは分かりません。 – polarysekt

+0

良いキャッチですが、これらの属性を動的バージョンに追加しても差はありません。 – Kevin

+0

'thisDiv.style [position/top/left]'を使用しましたか?私はあなたが既にimageBoxをインライン化しているという答えを提供することを意図していましたが、コード内でそれをやりたいのであれば、一度しか必要ないでしょう。 – polarysekt

答えて

2

あなたがするダイナミック内の要素に任意のスタイルを与えていませんプレイスマンここでの問題であるTバージョン

thisDiv.style.position="absolute"; 
thisDiv.style.top="0em"; 
thisDiv.style.left="0em"; 

document.getElementById("imageBox").style.top="0px"; 
document.getElementById("imageBox").style.height="1px"; 
document.getElementById("imageBox").style.position="absolute"; 

あなたのコードでこれを試してみて、あなたはあなたの静的なハードコーディングされたバージョンでスタイルを与えても、そのために他の必要な要素には、このようなスタイルを与えます。

+0

それを修正しましたが、あなたが実際に変更する必要があることを示唆した6行のうち、唯一のものは 'thisDiv.style.position =" absolute ";'私は 'thisDiv.position =" absolute "; 'を実行していました。思考は同じことでした。 (imageBoxスタイル設定は本文htmlで処理されました)。ありがとう! – Kevin

+0

@ケビンよ、うれしいことに助けてくれた。 –

関連する問題