レスポンシブサイトのJS設定

レスポンシブサイトではCSSを切り替えるだけでなく、JSも切り替える必要がある場合があります。ここでは効率的なJS切替テクニックを紹介します。

今回ご紹介するのは、CSSの font-family の値から切替の判断をするというテクニックです。

HTML

まずHTMLです。 font-family を設定する要素を作ります。

<div class="media-queries" data-media-queries=""></div>

CSS

次にCSSです。要素を display: none; で隠します。また、メディアクエリで画面幅に応じて font-family の値を切り替えます。

.media-queries {
    display: none;
    font-family: 'sp'
}
@media screen and (min-width: 768px) {
    .media-queries {
        font-family: 'pc'
    }
}

JS

最後はJSです。jQueryを使用しています。ページ読み込み時とウィンドウ幅切替時に要素の font-family の値を読み取りPC/SPのスクリプトを実行させます。

レスポンシブの各設定
(function(){
    //SPイベント
    function spEvent() {
        console.log('SP版で実行させたいコードをここに書きます。');
    }

    //PCイベント
    function pcEvent() {
        console.log('PC版で実行させたいコードをここに書きます。');
    }

    //レスポンシブ切替処理
    var $mediaQueries = ($('[data-media-queries]').length > 0) ? $('[data-media-queries]') : $('<div>');
    var layout = $mediaQueries.css('font-family').replace(/"/g, '');
    var current;

    //ページ読み込み時にPC/SPイベント発動
    if (layout === 'sp'){
        current = 'sp';
        spEvent();
    } else if (layout === 'pc') {
        current = 'pc';
        pcEvent();
    } else {
        return;
    }

    //ウィンドウサイズ切替時の設定
    var timer = false;
    $(window).on('resize', function(){
        if (timer !== false) {
            clearTimeout(timer);
        }
        timer = setTimeout(function() {
            var layout = $mediaQueries.css('font-family').replace(/"/g, '');
            if (layout === 'sp' && current === 'pc'){
                current = 'sp';
                spEvent();
            } else if (layout === 'pc' && current === 'sp') {
                current = 'pc';
                pcEvent();
            } else {
                return;
            }
        }, 200);
    });
})();