dポイントプレゼントキャンペーン実施中!

教えてください。

画面をリサイズすると画面再表示するようにしたいのですが、
下記のソースでは
IE8で無限ループになります。
どこがおかしいのでしょうか?
どのように直せばいいのでしょうか?

jQuery(document).ready(function () {
var timer = false;
$(window).on("load resize", ReLayout);

function ReLayout(event) {
var _width = $(window).width();
var winWidth_resized;

if(event.type == 'resize') {
if (_width > 767) {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout( disp, 200);
}
}
}
function disp(){
location.href = location.href;
}
});

A 回答 (2件)

通常のブラウザはリサイズすればレイアウトし直すと思いますので、何をなさりたいのかよくわかりませんが…



HTMLのload時に条件判定でdisp()が実行されるような状態の時は無限ループになる可能性があります。
個々のブラウザの挙動を確認してはいませんが、location.href = location.href;でリロードされるようなブラウザであれば、ロードする毎に再ロードすることになるのでは?

簡略化すれば以下のスクリプトとほぼ同じになるので…
 window.onload = disp;

load時のイベント処理として実行するのをやめれば、とりあえず無限ループにはならないと思いますが?(リサイズ時のみ動作するようにするという意味です)


しかしながら、そもそもが再読み込みする必要が無いのではないかと思いますけれど…

この回答への補足

回答ありがとうございます。

カルーセルスライダーを使っていたのですが、
画面を小さくしたときにした画面処理が
画面を大きく戻したときにどうしても元に戻らず
強制的にリロードして戻していました。

で、なぜかIE8だけ無限ループになっていました。

おっしゃるとおり
load時にはいりませんね。

ただ、load時を外しても
画面スクロールのたびに
リロードが走ってしまい、
ページ下に行けない状況になってしまいました。

IE8のみリロードしないという逃げ方しかないのでしょうか?

補足日時:2015/01/15 16:27
    • good
    • 0

ANo1です。



>画面スクロールのたびにリロードが走ってしまい~
普通はスクロールでリサイズのイベントが発生するとは思えないのですが…?

どこか他のところで、スクロールイベントが発生した際にdisp関数を呼び出している可能性が高いのではないかと想像しますが、そのようなことはありませんか?


>カルーセルスライダーを使っていたのですが、
>画面を小さくしたときにした画面処理が
>画面を大きく戻したときにどうしても元に戻らず
>強制的にリロードして戻していました
どのようなライブラリか不明ですが、内部の変数等の値がそのまま残っている可能性が高いと思います。
もしもユーザ用にAPIが解放されているのなら、リサイズ時に再初期化してあげれば、リロードする必要がなさそうに思いますが…

あるいは自作のものなら、そのように改造するか表示の際に都度サイズを取得するような方法に変えてあげれば、そのままでリサイズに対応できるようになると思います。
    • good
    • 0
この回答へのお礼

お返事遅くなりました。

ご回答いただきましてありがとうございました。

ちょっと、仕様から見直しということになってしまいました。

またお願いいたします。

お礼日時:2015/01/21 12:53

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