レスポンシブデザインに役立つ画像サイズ自動変換

By saeki - 13/01/12 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

おはようございます。佐伯です。
今回はレスポンシブデザインのサイトを作成する際に役立つjQueryのテクニックをご紹介します。

1.はじめに

2012090504
レスポンシブデザインのサイトを作成していると画像を端末ごとに変えてやる必要がでてきます。
CSS等で細かく指定する方法もありますが、この方法だとjQueryのみで完結するので管理がしやすいと思います。

2.仕組み

jQuery(function(){
    $('img').each(function(){
        var max = 280; // 最大幅
        var w = $(this).width();
        var h = $(this).height();
        if (w > max) {
            $(this).width(max).height(Math.round((max/w)*h));
        }
    });
});

上記ソ-スを読みこませることで、最大幅を示す変数max(ここでは280px)を超える画像について、最大幅に縮小します。
maxの値は適宜変更してください。

3.活用例

上で紹介したソースを使うことで、ページをPCサイトと共用したい場合、ユーザーエージェント別に振り分けて画像サイズを変更したい場合などに、上手く応用させることができます。
下記はnavigator.userAgentの判定文を追加し、それぞれに最大値を設定しています。

jQuery(function(){
    $('img').each(function(){
        var max = 0;
        if (navigator.userAgent.indexOf('iPhone') > 0) {
            max = 280; // iPhoneの最大幅
        } else if (navigator.userAgent.indexOf('iPad') > 0 ) {
            max = 768; // iPadの最大幅
        } else if (navigator.userAgent.indexOf('iPod') > 0 ) {
            max = 280; // iPodの最大幅
        } else if (navigator.userAgent.indexOf('Android') > 0) {
            max = 280; // Androidの最大幅
        }
        var w = $(this).width();
        var h = $(this).height();
        if (max != 0 && w > max) {
            $(this).width(max).height(Math.round((max/w)*h));
        }
    });
});

先程の例と同様にmaxの値は適宜修正してください。
PCサイトでは画像サイズの縮小を行わないように制御しています。

今回はimgタグについてこのような処理を施しましたが、divなどにも応用できるので是非使ってみて下さい。

Posted in 未分類 • • Top Of Page