-PR-
解決
済み

レイヤーのクリッピングを解除するにはどうすれば良いですか

  • 困ってます
  • 質問No.59405
  • 閲覧数46
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 88% (45/51)

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

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 の内容に合わせてサイズが変化していた頃の状態に、
戻す方法が分からなくて困っております。

やっぱり無理でしょうか。
何の回答もないとサミシイので、わからなくても誰か返事してあげて下さい。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル7

ベストアンサー率 33% (7/21)

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>
お礼コメント
tasahamu

お礼率 88% (45/51)

凄いです!!

早速、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:21
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル7

ベストアンサー率 33% (7/21)

参考にしていただいたようで良かったです。 少し気になったところと思いつたことが有ったので補足します。 クリッピングはレイヤーの表示する範囲を決めるだけなので、autoを使用しても、 元に戻る(クリッピングを解除する)と言うわけではなく、 auto(通常)の位置にクリッピングするだけだと思うんですね。 だからNNでも >document.layers['lay']. ...続きを読む
参考にしていただいたようで良かったです。
少し気になったところと思いつたことが有ったので補足します。

クリッピングはレイヤーの表示する範囲を決めるだけなので、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では全くスクリプトを作ったことが無いので自信は有りませんが・・


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ