
単純にレスポンシブサイトを作る際、cssのみで振り分けるだけならブラウザが勝手に処理してくれますが、javascriptで何らかの処理を行っていると、案外面倒なことになるなということで、ちょっとメモ書きです。
一般的な横幅で内容が変わるサイトの場合です。
$(function(){
var w = $(window).width();
Responsive();
function Responsive () {
//レスポンシブ処理
}
});
一番最初にこの記述があると思います。
もちろん、これだけだとブラウザのリサイズに対応できないので、リサイズ時の記述も併せて書きます。
$(function(){
var w = $(window).width();
var timer = false;
Responsive();
$(window).resize(function() {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout(function() {
Responsive();
}, 200);
});
function Responsive () {
//レスポンシブ処理
}
});
$(window).resize(function(){~
だけだとブラウザのリサイズ中ずっと処理が発生してしまうので、setTimeoutを使ってリサイズ終了時に処理をするようにしています。
このソースはこちらからいただきました。
[jQuery] ウインドウのリサイズ操作が終わった時にだけ処理を実行する | CreativeStyle
続いて、スマホの縦横回転にも対応させましょう。
$(function(){
var w = $(window).width();
var timer = false;
Responsive();
$(window).on("orientationchange resize",function() {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout(function() {
Responsive();
}, 200);
});
function Responsive () {
//レスポンシブ処理
}
});
$(window).resize(function(){~
のところを、
$(window).on(“orientationchange resize”,function() {~
と書いています。
これでブラウザのリサイズと、スマホの回転の処理を同時に書いていることになります。
つまり、
$(window).orientationchange(function(){~
と書くと、回転時のみの処理を行うこともできます。
これでOK…と思いきや、今時の親切なスマホさんは、スクロールするとアドレスバーを縮めたりして勝手にresizeを発生させてくれます。
というわけで、縦スクロールで処理が発生しないようにしましょう。
$(function(){
var w = $(window).width();
var w_resize;
var timer = false;
Responsive();
$(window).on("orientationchange resize",function() {
if (timer !== false) {
clearTimeout(timer);
}
timer = setTimeout(function() {
w_resize = $(window).width();
if (w != w_resize){
Responsive();
w = $(window).width();
}
}, 200);
});
function Responsive () {
//レスポンシブ処理
}
});
これで横幅が変ったときのみ処理を行うということになりました。
縦サイズが変わった時に表示が変わるのは特殊なケースだと思いますので、とりあえずはこちらでなんとかなりそうです。

コメント