Google
SSブログ

レスポンシブWebデザイン導入計画(Parllet の場合 設定ページ-5) [公開アプリ]

01_img.jpg

 

前回 の続きです。

 

※ 2014/1/9 追記

この記事の作成時点では誤りに気づいておらず、

jQuery(document).on(イベント, セレクタ, function(){...});

の2番目の引数がセレクタでなく、jQueryオブジェクトになってしまっていました。

詳しくは 1/9 のエントリ をご覧ください。

 

Parllet(個人で作成・公開しているアルファ版のWeb家計簿)

のレスポンシブ化は、トップページとログインページまでが完了していて、

この回 から設定ページに入りました。

実装する内容は、この回にポストしたものです。

 

前回 までで、768px 以下でヘッダーの1行目・2行目共にページメニューが消えて

2行目にパンくずリストが表示。幅の固定されている箇所もレスポンシブ化済み。

大分類・小分類クリックで開くスライドメニューを体当たりで

取り込んでいますが、今のところまだメニューが開きません。

 

■ ざっくり環境

OS:Windows 7 Home Premium
ブラウザ:IE 11.0

 

■ 現状

この回に、現時点の設定ページを元にスナップショットを兼ねてサンプル設定ページ1を作りました。

 

サンプル設定ページ1

02_sample_config_01_img.png

 

ここがスタート地点です。

今回も体当たりで学びながら進めていきます。

 

■ 体当たり開始

前回この回の案のこの辺に入りました。

大分類と小分類、どちらもクリックした際には、
Parllet(パレット) トップページで導入した(ここら辺
FacebookやGoogle+のようなスライドメニューが開いて
分類を変えられるようにします。

そしてその案をちょっとだけ詳細な表現にしました。

スライドメニューは2つ用意しておき、
大分類と小分類のクリックイベントで自身に対応した
スライドメニューに id を追加して閉じる時に id を削除

その後大分類(設定)だけで体当たりして、デバッグ時に通らなかった

jQuery.bind() を jQuery.on() に変更して通るようになりましたが、

それでもメニューが開かない状態です。

 

とりあえず前回のブレークポイントで止まってる時点で、

操作するメニュー要素をウォッチで見てみます。

id を追加して今回開く対象にしたつもりなのは jQuery('.large_cate') なので、

逆に変数 menu が class:large_cate を含むかどうかを確認。

02_sample_config_01_edit8_f12_debug6.png

03_sample_config_01_edit8_f12_debug7.png

04_sample_config_01_edit8_f12_debug8.png

05_sample_config_01_edit8_f12_debug9.png

 

・・。

なるほど、この時点で menu.hasClass('large_cate') の判定が false なんですね。

先に var menu = jQuery('#bt-menu'), と宣言しちゃってるから、

後から id 追加しても「なんですか?」って感じなのかな。

じゃあ jQuery('#bt-menu').hasClass('large_cate') は?

06_sample_config_01_edit8_f12_debug10.png

07_sample_config_01_edit8_f12_debug11.png

 

true ですな!

継ぎはぎな対応感満載ですが、まずは体当たりをやり切るのを

最優先として、menu で書かれた箇所を jQuery('#bt-menu') に変更。

それに、どうせ後々引っかかるので、var ・・・・ で宣言しちゃってる

変数で、menu を親要素にしてる人達も全部変更!

 

jquery.borderMenuPrlt.js 内の編集

function init() {
    var eventtype = mobilecheck() ? 'touchstart click' : 'click',
        resetMenu = function() {
            jQuery('#bt-menu').removeClass('bt-menu-open');
            jQuery('#bt-menu').addClass('bt-menu-close');
        };
    jQuery(document).on(eventtype, '#aLarge_cate', function() {
        jQuery('.large_cate').attr('id', 'bt-menu');
        jQuery('#bt-menu').children('a.bt-menu-trigger').click();
        return false;
    });
    jQuery(document).on(eventtype, jQuery('#bt-menu').children('a.bt-menu-trigger'), function(ev) {
        ev.stopPropagation();
        ev.preventDefault();
        
        if (jQuery('#bt-menu').hasClass('bt-menu-open')) {
            resetMenu();
        } else {
            jQuery('#bt-menu').removeClass('bt-menu-close');
            jQuery('#bt-menu').addClass('bt-menu-open');
        }
    });
    jQuery(document).on(eventtype, jQuery('#bt-menu').children('div.bt-overlay'), function(ev) {
        ev.stopPropagation();
        ev.preventDefault();
        resetMenu();
    });
    jQuery('#bt-menu').find('ul').find('a').click(function(ev) {
        if (jQuery('#bt-menu').hasClass('bt-menu-open')) resetMenu();
    });
    
    // Android 2.3 でスクロールしないバグへの対応
    if (navigator.userAgent.indexOf('Android') > 0) {
        var box = jQuery('#bt-menu').children('.divUlFrm'),
            touchStartPositionX,
            (中略)
}

 

※ 2014/1/9 追記

この記事の作成時点では誤りに気づいておらず、

jQuery(document).on(イベント, セレクタ, function(){...});

の2番目の引数がセレクタでなく、jQueryオブジェクトになってしまっていました。

詳しくは 1/9 のエントリ をご覧ください。

 

はい!リロードして再度 大分類(設定)をクリック!

08_sample_config_01_edit9_f12_exec1.png

 

・・・。

まだ駄目です ^^;

 

今回の体当たりでの学び

  • javascript の 関数内の変数として作った jQueryオブジェクトは、後で動的に追加したオブジェクトとは別物になるので、追加後を想定したイベント内では再度jQueryオブジェクトを作成する必要がある。

 

次回に続きます!

 

1/6 追記

続きを書きました。


1/11 追記

まとめを書きました。




 

 

いつも最後まで読んでいただいてありがとうございますm(__)m

何度も見に来ていただけることが、間違いなく私の原動力となっています(^_^)

またお越しくださいませませ!

 


nice!(0)  コメント(0)  トラックバック(2) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 2

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。