ダイナミックHTMLを動作させる際には、殆どレイヤーを使いこなさなくてはなりません。 しかし、複雑になればなるほどクロスブラウズが困難になるのも事実です。 しかし、工夫すればなんとかなるわけで、その工夫の1つがこのスクリプトです。
IEとNNのレイヤーの参照の仕方、表示のさせ方は異なりますので、ブラウザごとに振り分け処理をします。 しかし、元のルーチンでは同一のコールをするので、面倒なクロスブラウズに拘る必要が減ってきます。 (レイヤーセットも併用すると更に効果的)
このスクリプトを使えば、IE、NNに拘わらずにスタイルを含めた表示が可能になるので、作業効率はかなり向上します。
function Draw(ly,show,com,x,y,s,c,w){ if(iIE4){ switch(show){ case 0: ly.style.visibility = "hidden"; break; case 1: ly.style.posLeft = x; ly.style.posTop = y; ly.innerHTML = com; ly.style.fontSize = s + "pt"; ly.style.color = c; ly.style.width = w; ly.style.visibility = "visible"; break; case 2: ly.style.posLeft = x; ly.style.posTop = y; s = "<DIV CLASS=\'"+s+"\'>"+com+"<\/DIV>"; ly.innerHTML = s; ly.style.color = c; ly.style.width = w; ly.style.visibility = "visible"; break; } } if(iNN4){ switch(show){ case 0: ly.visibility = "hide"; break; case 1: ly.document.open(); ly.document.fgColor = c; ly.document.write("<DIV STYLE=\'font-size:",s,"pt;\'>",com,"<\/DIV>"); ly.document.close(); ly.left = x; ly.top = y; ly.visibility = "show"; break; case 2: ly.document.open(); ly.document.fgColor = c; ly.document.write("<DIV CLASS=\'",s,"\'>",com,"<\/DIV>"); ly.document.close(); ly.left = x; ly.top = y; ly.visibility = "show"; break; } } }
<BODY> <DIV ID="iL0" STYLE="position:absolute;top:0;"></DIV> <DIV ID="iL12" STYLE="position:absolute;top:0;"></DIV> </BODY>
var F = true; var Comm1="OBJECT - iL0"; var Comm2="OBJECT - iL12"; function Show(){ var lay1,lay2; lay1 = SetLayer("iL","0",""); lay2 = SetLayer("iL","1","2"); if(F){ Draw(lay1,1,Comm1,50,50,10,"#ff0000",250); Draw(lay2,0,0,0,0,0,0,0); }else{ Draw(lay1,0,0,0,0,0,0,0); Draw(lay2,1,Comm2,50,50,10,"#0000ff",250); } F = !F; setTimeout("Show()",1000); }
<BODY onload="Show()">
IE4,NN4以上