やっぱりNNでうまく動かない。

[上に] [前に] [次に]
saki [E-Mail] 2000/03/23(木) 02:25:32
Auraiさんに書いていただいたスクリプトを元に、
書いてみたんですが、やっぱりNNだとうまく動きません。
IEでのこのスクリプトの結果と同様な結果をNNで得るには
いったいどう書けばよろしいのでしょうか。

<SCRIPT LANGUAGE="javascript">

function view(name) {
  if(document.layers) with(document.layers[name]){
    if (visibility != 'hide') { visibility = 'hide'; }
    else { visibility = 'show'; }
  }
  else with(document.all(name)){
    if (style.display != 'none') { style.display = 'none'; }
    else { style.display = ''; }
  }
}
// -->
</SCRIPT>
<a href="javascript:view('a')">青のテーブル</a>  <a href="javascript:view('b')">緑のテーブル</a>
<br>
<SPAN ID=a STYLE="display:none">
<ILAYER NAME=a VISIBILITY="hide">
<table width=100% height=150><tr><td bgcolor=blue><br>
</td></tr></table>
</ILAYER>
</SPAN>
<SPAN ID=b STYLE="display:none">
<ILAYER NAME=b VISIBILITY="hide">
<table width=100% height=150><tr><td bgcolor=green><br>
</td></tr></table>
</ILAYER>
</SPAN>
<table width=100% height=150><tr><td bgcolor=red><br>
</td></tr></table>

Aurai [E-Mail] 2000/03/23(木) 05:23:00
試行錯誤してみましたが、なんか駄目です
下のスクリプトで一見うまくいくように見えますが
スクロールが…………
リサイズで対策できそうですが(コメントアウトを外してみてください)
ウィンドウを最大化していると意味無いし
……こうなったらフラグをどこかに用意して再読込か!?(死)

<a href="javascript:view_table('table_a')">table_a</a>|
<a href="javascript:view_table('table_b')">table_b</a><br>
<br>
<!-- table_a -->
<SPAN ID="table_a" STYLE="display:none">
<LAYER NAME="table_a" VISIBILITY="hide">
<table width=100% height=150><tr><td bgcolor=blue><br>
</td></tr></table>
</LAYER>
</SPAN>
<!-- table_b -->
<SPAN ID="table_b" STYLE="display:none">
<LAYER NAME="table_b" VISIBILITY="hide">
<table width=100% height=150><tr><td bgcolor=green><br>
</td></tr></table>
</LAYER>
</SPAN>
<!-- table_c -->
<SPAN ID="table_c">
<ILAYER NAME="table_c" VISIBILITY="show">
<table width=100% height=150><tr><td bgcolor=red><br>
</td></tr></table>
</ILAYER>
</SPAN>
<SCRIPT LANGUAGE="javascript">
<!--
function view_table(table_name) {
  if(document.layers) with(document.layers[table_name]){
    if (visibility != 'hide') {
      visibility = 'hide';
      for (i=window.document.layers.length-1;i>-1;i--){
        if (window.document.layers[i].name == table_name) break;
        window.document.layers[i].moveBy(0,-160);
      }
//      window.resizeBy(-1,-1);
    } else {
      visibility = 'show';
      for (i=window.document.layers.length-1;i>-1;i--){
        if (window.document.layers[i].name == table_name) break;
        window.document.layers[i].moveBy(0,160);
      }
//      window.resizeBy(1,1);
    }
  }
  else with(document.all(table_name)){
    if (style.display != 'none') style.display = 'none';
    else style.display = '';
  }
}
// -->
</SCRIPT>

saki 2000/03/26(日) 23:54:30
どうも、お返事遅くなりました。
一見して、「おおーすばらしー」とおもったんですけど、
応用利かないですね、これ(笑)
それぞれのテーブルの高さが、決まっていない場合、
無理っぽい。
下の方切れちゃうし。。
私的に、レイヤの高さを取得して、
高さがあれば「0」に、
0ならもとにもどすって感じでやれるかなと思ったんですが、
自動で決定されるレイヤの高さを取得するのって不可能なんですかねー?
ちなみに以下のスクリプトはうまく動きません(笑)

<a href="javascript:view_table('table_a')">table_a</a>|
<a href="javascript:view_table('table_b')">table_b</a>|
<a href="javascript:view_table('table_c')">table_c</a><br>
<br>
<!-- table_a -->
<SPAN ID="table_a" STYLE="display:none">
<ILAYER NAME="table_a" VISIBILITY="hide" height="0">
<table width=100% height=150><tr><td bgcolor=blue><br>
</td></tr></table>
</ILAYER>
</SPAN>
<!-- table_b -->
<SPAN ID="table_b" STYLE="display:none">
<ILAYER NAME="table_b" VISIBILITY="hide" height="0">
<table width=100% height=350><tr><td bgcolor=green><br>
</td></tr></table>
</ILAYER>
</SPAN>
<!-- table_c -->
<SPAN ID="table_c" STYLE="display:none">
<ILAYER NAME="table_c" VISIBILITY="hide" height="0">
<table width=100% height=250><tr><td bgcolor=black><br>
</td></tr></table>
</ILAYER>
</SPAN>
<!-- table -->
<SPAN ID="table">
<ILAYER NAME="table" VISIBILITY="show">
<table width=100% height=150><tr><td bgcolor=red><br>
</td></tr></table>
</ILAYER>
</SPAN>
<SCRIPT LANGUAGE="javascript">
<!--
function view_table(table_name) {
  if(document.layers) with(document.layers[table_name]){
    if (visibility != 'hide') {
      visibility = 'hide';
      for (i=window.document.layers.length-1;i>-1;i--){
        if (window.document.layers[i].name == table_name) break;
        if (window.document.layers[i].height != '') window.document.layers[i].height='';
        else window.document.layers[i].height='0';
      }
//      window.resizeBy(-1,-1);
    } else {
      visibility = 'show';
      for (i=window.document.layers.length-1;i>-1;i--){
        if (window.document.layers[i].name == table_name) break;
        if (window.document.layers[i].height != '0') window.document.layers[i].height='0';
        else window.document.layers[i].height='';
      }
//      window.resizeBy(1,1);
    }
  }
  else with(document.all(table_name)){
    if (style.display != 'none') style.display = 'none';
    else style.display = '';
  }
}
// -->
</SCRIPT>

saki 2000/03/27(月) 00:03:27
レイヤの高さって、自動的に最適なサイズに調整されちゃうみたいですね。
原因は、それかなー?
height=0 なのに、ちゃっかりテーブルの指定したピクセル分、
隙間が空いてますし。困った。

saki 2000/03/27(月) 18:58:11
あ、すいません、スクロールの対策は
コメントアウトはずんでしたね。
やってませんでした。

Aurai [E-Mail] 2000/03/28(火) 06:57:10
>それぞれのテーブルの高さが、決まっていない場合、
>無理っぽい。
layerの高さでlayerを動かす値を指定すれば大丈夫だと思います
<SCRIPT LANGUAGE="javascript">
<!--
function view_table(table_name) {
  if(document.layers) with(document.layers[table_name]){
    if (visibility != 'hide') {
      visibility = 'hide';
      for (i=window.document.layers.length-1;i>-1;i--){
        if (window.document.layers[i].name == table_name) break;
        window.document.layers[i].moveBy(0,-1*clip.height);
      }
//      window.resizeBy(-1,-1);
    } else {
      visibility = 'show';
      for (i=window.document.layers.length-1;i>-1;i--){
        if (window.document.layers[i].name == table_name) break;
        window.document.layers[i].moveBy(0,clip.height);
      }
//      window.resizeBy(1,1);
    }
  }
  else with(document.all(table_name)){
    if (style.display != 'none') style.display = 'none';
    else style.display = '';
  }
}
// -->
</SCRIPT>

>あ、すいません、スクロールの対策は
>コメントアウトはずんでしたね。
>やってませんでした。
期待はずれだとは思いますが(--;
やはりリロードさせるのが一つの方法だと思います
――ああ、こんなのDHTMLじゃない

saki 2000/03/29(水) 00:00:02
あの、感動しました(笑)
何度やっても出来なかったのでここまでこれるとは思いませんでした。
根気よくお答え下すってありがとう御座いました。
ところで、
スクロール切れについてですが、リロードで対応できるとのことですが、
どういう意味でしょうか?
「location.href = location.href」
とかでリロードさせると、
スクリプト動かす前の初期状態に表示が戻りますよね?
なんか、私が取り違えてるのでしょうか…?
でも、Auraiさんに書いていただいた
スクリプトが自分が思ってたとおりに動いたので
ちょっとどうでも良くなってますが(笑)
この熱が冷めたところ、また悩みそうなので
今のうちにお聞きしておこうかと(笑)

Aurai [E-Mail] 2000/03/29(水) 07:00:43
cookieかなんかでどこのテーブルが開いているかの
情報を保存しておいてリロードするんです
で、ロード時にその情報を参照して画面を書き出せば
問題は全てクリア出来るんじゃないか、と私は思いました
スクリプトのレスポンスは悪くなるでしょうが

saki 2000/03/30(木) 02:26:22
[[解決]]
あ、なるほど。
早速試してみます。
本当に、ありがとうございました。

[上に] [前に] [次に]