難しい内容かもしれませんが、宜しくお願いします。

IE4 や NN4 で例えば以下の様に、
'lay'という名前のレイヤーを作成したとします。
<DIV ID='lay' STYLE='position:absolute'></DIV>

すると以下の様に、JavaScriptから文字列 htm をレイヤーに書き込めます。
//IEの場合
document.all('lay').innerHTML=htm;
//NNの場合
document.layers['lay'].document.open();
document.layers['lay'].document.write(htm);
document.layers['lay'].document.close();

そしてレイヤーのサイズも文字列 htm の内容に合わせて変化します。
しかし以下の様に、1度でもレイヤーをクリッピングした後に、
//IEの場合
document.all('lay').style.width=100;
document.all('lay').style.height=100;
document.all('lay').style.clip='rect(0,100,100,0)';
//NNの場合
document.layers['lay'].clip.left=0;
document.layers['lay'].clip.right=100;
document.layers['lay'].clip.bottom=100;
document.layers['lay'].clip.top=0;

このレイヤーをクリッピングする前の、
文字列 htm の内容に合わせてサイズが変化していた頃の状態に、
戻す方法が分からなくて困っております。

やっぱり無理でしょうか。
何の回答もないとサミシイので、わからなくても誰か返事してあげて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

IEでしか調べていませんが、rectにautoを指定するともとに戻るようです。


しかしここで言う”もとに戻る”は指定されているスタイルシート(レイヤー?)
の大きさに戻るという意味なので、
>document.all('lay').style.width=100;
>document.all('lay').style.height=100;
と指定されるとここに”戻る”ようです。
以下は私が書いたテストHtmlです。参考になれば幸いです。

<HTML>
<HEAD>
<TITLE>test</TITLE>
<SCRIPT Language="JavaScript">
<!--
function fn1(){
htm="testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"
document.all('lay').innerHTML=htm;
}
function fn2(){
document.all('lay').style.clip='rect(0,100,100,0)';
}
function fn3(){
document.all('lay').style.clip='rect(auto,auto,auto,auto)';
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<DIV ID='lay' STYLE="position:absolute;background-color:#CCCCFF">
</DIV>
<BR><BR><BR><BR>
<FORM>
<INPUT TYPE="button" onClick="fn1()" VALUE="入力">
<INPUT TYPE="button" onClick="fn2()" VALUE="DoClip">
<INPUT TYPE="button" onClick="fn3()" VALUE="return">
</FORM>
</BODY>
</HTML>

参考URL:http://www.microsoft.com/JAPAN/developer/library …
    • good
    • 0
この回答へのお礼

凄いです!!

早速、IEで試してみると、
document.all('lay').style.width=0;
document.all('lay').style.height=0;
document.all('lay').style.clip='rect(auto,auto,auto,auto)';
で完全に元に戻りました。(凄すぎるぅぅぅ!!)
本当に本当にありがとうございました。

しかし、NNの方は auto を指定してもダメでした。
現在作成中のJavaScriptは、NNでも動作させたいので、
NNの方でご存知のお方は引き続きお待ちしております。
宜しくお願い致します。

お礼日時:2001/04/04 12:29

参考にしていただいたようで良かったです。


少し気になったところと思いつたことが有ったので補足します。

クリッピングはレイヤーの表示する範囲を決めるだけなので、autoを使用しても、
元に戻る(クリッピングを解除する)と言うわけではなく、
auto(通常)の位置にクリッピングするだけだと思うんですね。
だからNNでも
>document.layers['lay'].document.write(htm);
を実行したとき、この時点のクリップの位置を(グローバル)変数に
取っておけば良いと思います。具体的には
hensu1=document.layers['lay'].clip.left;
hensu2=document.layers['lay'].clip.right;
hensu3=document.layers['lay'].clip.bottom;
hensu4=document.layers['lay'].clip.top;
hensu5=document.layers['lay'].clip.width;
hensu6=document.layers['lay'].clip.height;
って感じです。
こうすれば、後でいろいろクリッピングしても、戻したいときに
document.layers['lay'].clip.left=hensu1;
document.layers['lay'].clip.right=hensu2;
document.layers['lay'].clip.bottom=hensu3;
document.layers['lay'].clip.top=hensu4;
document.layers['lay'].clip.width=hensu5;
document.layers['lay'].clip.height=hensu6;
と指定すれば良いんじゃないかと思います。
この方法だとIEでも使えそうですね。
NNでは全くスクリプトを作ったことが無いので自信は有りませんが・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QNN4とNN6でのレイヤーの表示・非表示

WINとMACでNN4とNN6でのレイヤーの表示・非表示を制御する、そんな都合の良いJavaScriptってありますか?
あったら教えて下さい!!

Aベストアンサー

以下は、私が使っていたものを、そのまま写しています。

function ShowMessage(mID){
if(document.all) document.all(mID).style.visibility = 'visible';
else if(document.layers) document.layers[mID].visibility = true;
else if(document.getElementById) document.getElementById(mID).style.visib
ility = 'visible';
}

function HideMessage(mID){
if(document.all) document.all(mID).style.visibility = 'hidden';
else if(document.layers) document.layers[mID].visibility = false;
else if(document.getElementById) document.getElementById(mID).style.visib
ility = 'hidden';
}

おわかりだとは思いますが、mIDは、各レイヤーのIDです。
引数にして渡してやってください。

ちなみに、Netscape6.0以降は、document.layersはFALSEになってしまいます。
そこで、document.getElementByIdを使うのですが、これはIE5.0以上でもTRUEになってしまいます。
(だから elseを使っているんですが)

Netscapeは、4.x以前と6.0以降でまったく別物になっているので、
同じ処理はほとんどの場合使えません。
むしろ、6.0はIE5.x以降にかなり近いです。

WINとMACの違いは、ブラウザの細かい仕様とバグに関わってくるので、
あんまり気にしても仕方がないような。。。

以下は、私が使っていたものを、そのまま写しています。

function ShowMessage(mID){
if(document.all) document.all(mID).style.visibility = 'visible';
else if(document.layers) document.layers[mID].visibility = true;
else if(document.getElementById) document.getElementById(mID).style.visib
ility = 'visible';
}

function HideMessage(mID){
if(document.all) document.all(mID).style.visibility = 'hidden';
else i...続きを読む

Qif(document.all && navigator.appVersion.indexOf('Mac')!=-1)returnの意味

よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。

//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return

//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ、で、falseが返されるのでしょうか?
しかし、そもそもnavigatorオブジェクトはブラウザの種類のことではないのか?と混乱してしまっています。
また、document.allがどのような役割を果たしているのかも分かりません。なぜここでdocument.allが出てくるのでしょうか?

どなたか分かる方いらっしゃいましたら、ご教授宜しくお願いします。

よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。

//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return

//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ...続きを読む

Aベストアンサー

「document.all」は昔はIEにだけ存在するオブジェクトだったのでIEであるかどうかの判定に使われました。

今ではOperaやNetscape等でもIEへの互換の為に存在するのでIEかどうかの判定に使われる事は減ってきています。
IEであるかどうかの判定ではなく、純粋にdocument.allが在る(使える)かという判定にはもちろん使用されますが。

「navigator.appVersion」は確かにブラウザの種類なんですが、実際にはOS名も含まれていたりすのでOSの判定にも使われたりします。

また、 != -1 というのは indexOf関数の結果が 0~なら文字列が見つかったという意味(真偽ではなく、見つかった位置を返す関数)になるのでこういう比較式を使用しています。
(1でなかったらMacユーザという解釈はちょっと違います。)

参考URL:http://www.openspc2.org/JavaScript/ref/

QNN7.0でレイヤーの表示・非表示

レイヤーの表示・非表示のスクリプトなんですが、

function OpenLayer()
{
//NNの場合
if(document.layers)
{
document.content_menu.visibility="visible";
}
//IEの場合
else
{
content_menu.style.visibility="visible";
}
}
function CloseLayer()
{
//NNの場合
if(document.layers)
{
document.content_menu.visibility="hidden";
}
//IEの場合
else
{
content_menu.style.visibility="hidden";
}
}

に書きました。
IE6.0では動作しますがNN7.0では何も起こりません。
どなたかどのように表記をすればいいのか教えてください。よろしくお願いします。

Aベストアンサー

var version = navigator.appVersion.charAt(0);
if( navigator.appName == "Netscape" && version >= "5")
{
//document.write("NN6");
// ここに NN6.0以上 の関数を(全て)書きます(5 はない)
function OpenLayer()
{
document.getElementById(content_menu).visibility="visible";
}

function CloseLayer()
{
document.getElementById(content_menu).content_menu.visibility="hidden";
}

} else if( navigator.appName == "Netscape" && version < "5" && version >= "4")
{
//document.write("NN4 "); document.write(version);
// ここに NN4.x の関数を(全て)書きます
function OpenLayer()
{
document.content_menu.visibility="visible";
}

function CloseLayer()
{
document.content_menu.visibility="hidden";
}
} else {
//document.write("IE "); document.write(version);
// ここに IE の関数を(全て)書きます
function OpenLayer()
{
document.content_menu.style.visibility="visible";
}

function CloseLayer()
{
document.content_menu.style.visibility="hidden";
}
}
(テストしていないので、自信なし)

var version = navigator.appVersion.charAt(0);
if( navigator.appName == "Netscape" && version >= "5")
{
//document.write("NN6");
// ここに NN6.0以上 の関数を(全て)書きます(5 はない)
function OpenLayer()
{
document.getElementById(content_menu).visibility="visible";
}

function CloseLayer()
{
document.getElementById(content_menu...続きを読む

Qdocument.getElementById( ).style.displayについて

「document.getElementById( ).style.display」を使って
スタイルシートを書き換え、画像とテキストの表示替えをしています。
Firefoxでは正常に動作するのですが、
IEでは「displayプロパティ」を取得できずに動作しません。
htmlは以下のとおりです。
どなたかお分かりになる方、教えていただけないでしょうか?
よろしくお願いします。

★javascriptの内容
function toggle(Aid,Bid,Cid,Did,Eid) {
document.getElementById(Aid).style.display = 'none';
document.getElementById(Bid).style.display = 'inherit';
document.getElementById(Cid).style.display = 'inherit';
document.getElementById(Did).style.display = 'none';
document.getElementById(Eid).style.display = 'none';
}
★スタイルシートの内容
#page {width: 910px;}
#ai{height: 33px;display:inherit;}
#kaki{height: 33px;display:none;}
#img_ai{margin: 0px;float: left;display:none;}
#img_kaki{margin: 0px;float: left;display:inherit;}

「document.getElementById( ).style.display」を使って
スタイルシートを書き換え、画像とテキストの表示替えをしています。
Firefoxでは正常に動作するのですが、
IEでは「displayプロパティ」を取得できずに動作しません。
htmlは以下のとおりです。
どなたかお分かりになる方、教えていただけないでしょうか?
よろしくお願いします。

★javascriptの内容
function toggle(Aid,Bid,Cid,Did,Eid) {
document.getElementById(Aid).style.display = 'none';
document.getElementById(Bid).style.displ...続きを読む

Aベストアンサー

いろいろ調べてみましたが、結論として
「inherit」をIE系(IE5.x、IE6)がサポートしていないのが原因の様です。

「displayプロパティの値を取得できませんでした。引数が不正です。」
のメッセージは、~~.style.displayのプロパティが参照できない事が原因ではなく、右辺値'inherit'が
受け付けられない事によって起こっています。

function toggle(Aid,Bid,Cid,Did,Eid) {
  document.getElementById(Aid).style.display = 'none';
  document.getElementById(Bid).style.display = 'inherit';  ※
  document.getElementById(Cid).style.display = 'inherit';
  document.getElementById(Did).style.display = 'none';
  document.getElementById(Eid).style.display = 'none';
}

現在は、※の箇所でエラーが発生します。
試みに、一行目の'none'を'xxxx'に変えると、そこでエラーが発生します。
これは、代入値が受付可能なものでないとエラーとなる事を示しています。

ちなみに以下のMSDNのライブラリでも、displayプロパティに対する設定値として'inherit'は
出てきません。
(http://msdn.microsoft.com/library/default.asp?url=/workshop/author/css/reference/css_ref_attributes_entry.asp)

一方で、FirefoxのCSS対応表
(http://f57.aaa.livedoor.jp/~motohiko/CSS/css2.1.html)
「'run-in', 'inline-block', 'inline-table' には非対応。」とありますが、'inherit'は対応している
ようです。

代替手段はありそうですが、質問者の方が'inherit'をどのような意図で使っているかわかりかねるので
その点はお答えかねます。

いろいろ調べてみましたが、結論として
「inherit」をIE系(IE5.x、IE6)がサポートしていないのが原因の様です。

「displayプロパティの値を取得できませんでした。引数が不正です。」
のメッセージは、~~.style.displayのプロパティが参照できない事が原因ではなく、右辺値'inherit'が
受け付けられない事によって起こっています。

function toggle(Aid,Bid,Cid,Did,Eid) {
  document.getElementById(Aid).style.display = 'none';
  document.getElementById(Bid).style.display = 'inherit'...続きを読む

Q質問です! Operaって、document.all使えるんですか?

質問です! Operaって、document.all使えるんですか?
javascript:alert(document.all)という風に入れたら、[object HTMLCollection]という値が返ってきました
ちなみに、

 Firefox3.6 : [object HTML document.all class]
Netscape7 : undefined
Safari (おそらく4) : Operaと同様。

document.allて、IEだけかと思っていましたが。

Aベストアンサー

Gecko 系も Firefox 以前、Mozilla 1.8 辺(?)から document.all をサポートしています。ただし、

・Full Standards Mode では使用できない。
・document.all.tags は未サポート。
・if (document.all) は必ず偽を返す。

という制約があります。

Bugzilla に長い議論がありますが、anti-MS かはあまり関係ありません。心情的にはともかく、Gecko の開発者は IE の挙動の解析に多大な労力を割いています。

議論の 1 つは、すでに W3C-DOM の getElementsByTagName、getElementById が IE を含むほとんどのブラウザで動作するのに、document.all が必要かどうか。もしサポートしたことにより、開発者が document.all を安易に使い出すようになれば、IE/NN ブラウザ戦争の二の舞になりかねない。しかしながら、すでに all を用いたコードが大量に存在するという現実もあります。

all をサポートするのは良しとしても、今後の開発者が all を使うことを推奨しているわけではない。上記はそういう意思表示と考えられます。

ところで、IE5-7 以下の getElementById が id 属性だけでなく name 属性も検索する、あるいは IE6-7 の getElementsByTagName('*') が要素だけでなくコメント(処理命令や文書型宣言もコメントと見なす)も拾う、というのはよく知られた不具合ですが、これらはもともと all の挙動から来ています。そして前者に関しては IE8 で修正され、getElementById は id 属性のみを検索するようになりました。

つまり、all を実装するにも仕様が不明瞭であり、しかも MS 自身によって変更されうるということです。これに関しては No.2 が言うように、HTML5 の HTMLAllCollection の導入が助けとなるでしょう。

いずれにせよ、Windows プログラミングでもしない限り、今後の開発者が all を使う必要はないと思います(IE 専用であることを示すために、敢えて all を使うことはあるでしょうが)。あと、JScript と MSHTML は区別すべきかと思います。

Gecko 系も Firefox 以前、Mozilla 1.8 辺(?)から document.all をサポートしています。ただし、

・Full Standards Mode では使用できない。
・document.all.tags は未サポート。
・if (document.all) は必ず偽を返す。

という制約があります。

Bugzilla に長い議論がありますが、anti-MS かはあまり関係ありません。心情的にはともかく、Gecko の開発者は IE の挙動の解析に多大な労力を割いています。

議論の 1 つは、すでに W3C-DOM の getElementsByTagName、getElementById が IE を含むほとん...続きを読む


人気Q&Aランキング

おすすめ情報