ウインドウのリサイズ操作が終わった時にリロードする方法

こんにちは。デザイナーのSUZUKIです。
今回はレスポンシブに役立つリロードする方法を紹介します。


PC用やスマホ用でスクリプトをかき分けることがありますが、
最初に読み込んだ時のスクリプトが残っていて、
ウィンドウサイズを変更したときにうまく動作しないことがあります。

また、全画面の画像がウィンドウサイズを変更したときに画像サイズが足りないこともあります。
特にスライダー系のプラグイン入れているときに陥りやすいですね。

状況ごとに最適な対応方法がありますが、
最終手段としてウィンドウサイズを変更したらリロードする方法が有効なので、
今回はその方法を説明します。
※最終的な方法のみ見たい方は方法3をご覧ください。

方法1

普通に記述すると下記のようになりますが、これには問題があります。

$(window).resize(function() {
// リロード
location.reload();
});

ウィンドウサイズを変更している間も処理をし続けてしまいます。

方法2

そこで、下記はsetTimeoutを使い、指定時間後にリロードを実行させています。
※ここでは200ミリ秒をしていますが、ここは自由に指定できます。
何度もリサイズ処理しないようにclearTimeoutで毎回のイベントを取り消し、最後の一回のみ実行します。

var timer = false;
$(window).resize(function() {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout(function() {
// リロード
location.reload();
}, 200);
});

これで問題解決と思ったんですが、実はまだ問題がありました。
スマホで確認したところ、スクロールするとリロードされてしまいました。
これは、スクロールするとアドレスバーが小さくなるので、
縦のブラウザサイズが変わると認識されるのです。

方法3

そこでウィンドウサイズ全体ではなく、横幅を取得して、
横幅に変化があった時のみリロードさせるようにしたのが下記の方法です。

$(function(){
var timer = false;
var prewidth = $(window).width();
$(window).resize(function() {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout(function() {
var nowWidth = $(window).width();
if(prewidth !== nowWidth){
// リロード
location.reload();
}
prewidth = nowWidth;
}, 200);
});
});

これで問題なくリロードが実行され、
スクリプトや画像の読み込みが正常になりました。

まとめ

本来は問題ごとに最適な方法があると思います。
いろいろなプラグインを使用するケースが多いので、
どうしてもすべてが正常に処理できない場合がでてきてしまいます。
困ったときは上記の方法を手段の一つとして試してみてください。

それにしても、スマホのスクロールでウィンドウサイズが変わったと
認識されると分かった時は焦りました。
どう対応するか悩みました。
方法3のやり方を説明していた参考サイトには助けていただきました。
本当に感謝です。

参考リンク

下記は参考にしたサイトになります。
詳しく知りたい方はどうぞ。

  • このエントリーをはてなブックマークに追加
この記事は木村が監修しました。

プラカンが目指す3つの顧客満足

  1. ホームページのできあがりに
    満足していただく

  2. 仕事の進め方に
    満足していただく

  3. サポート・フォーローに
    満足していただく

詳しくはホームページ企画・設計をご覧ください

ホームページ企画・設計

ホームページに関するご要望がございましたら、お気軽にご相談ください。

全国各地のホームページ制作に対応

プラカンは大阪本社、東京事務所を拠点に首都圏、関西圏はもちろん、全国のお客様のホームページ作りのお手伝いをさせていただきたいと考えております。オンラインでの無料相談にも対応しております。ぜひ一度ご相談ください。

お問い合わせ

お電話でのお問い合わせ