アプリ版:「スタンプのみでお礼する」機能のリリースについて

比較的単純な表形式の表示をするHTMLを作成しています。
上段の項目タイトルなどの部分を固定しておいて、下のデータ群は上下スクロールで見るという使い方ができるように、上下のブロックに分けて表示しています。(エクセルの「ウインドウ枠の固定」のイメージです)

画面をリサイズした際に、セル内の文字数によっては高さが変わってしまう場合があるので、ブロックの高さの調整が必要になってきます。
表示の横幅を固定してしまえば調整が不要になるのはわかっていますが、HTMLということもあり、全体幅100%などの相対指定やある項目幅のみの指定など、部分的な指定のみであとはブラウザ側にまかせる表示方法をとっています。(表の種類がいろいろあるので、全部を計算で決めるのが面倒ということもありますが。)

そこで調整するために、画面リサイズの際にonresizeでJavaScriptによる調整をしようと考えましたが、onresizeではブラウザが再表示する前にイベントが発生するようです。
一方、調整するのにはブラウザの表示状態を見てブロックの高さ決めているため、このタイミングだと正しく調整ができません。(項目とデータの間にマーカーを入れておいて、その位置を計ることでブロックのサイズを割り出しています。)

代案として、onresizeではフラグを立てるだけにして、画面上にマウスが戻った時に(再表示後と見て)改めてブロックの高さを調整するという少々回りくどい方法を考えました。
一応、これでなんとかなってはいますが、リサイズ後に画面外にマウスがあるままだと調整前の表示のままになってしまうという欠点があります。

そこで質問ですが、もう少しスマートな対応のアイデアはないでしょうか?
ブラウザはIEのみの環境ですので、IE限定でかまいません。

A 回答 (1件)

よくわかってないけど、


onresize="setTimeout(調整関数,1)"
みたいにタイマーで調整の関数を呼び出したらうまくいきませんかね?
http://www.tohoho-web.com/js/window.htm#setTimeout

時間については、一旦、Javascriptパーサーを開放するのが目的なので1ミリ秒でも問題ない・・・と思う。

この回答への補足

早速実験してみたところ、うまくいきました。
軽いデータで実験したので1ミリ秒でも全く問題ありませんでしたが、安全をみて、視覚的に問題がなさそうな10ミリ秒くらいで仮設定してみることにしました。
ありがとうございました。

面白いことにIEでは最初はタイマーが効きませんでした。(数字に関わらず1ミリ秒くらいで実行していたらしい・・)
onresize="setTimeout(調整関数,タイム);"のセミコロンを入れたらば、やっと待ち時間が正しく解釈されました。

補足日時:2008/06/19 21:24
    • good
    • 0
この回答へのお礼

なるほど!
ブラウザの表示時間との関係で、Timeoutの設定をどのくらいにするかが微妙そうですが、私のアイデアよりもはるかにスマートですね。
ありがとうございます。

お礼日時:2008/06/19 21:02

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