- ベストアンサー
jQueryを使用してのメガメニューの記述
- jQueryを使用してメガメニューを作成する方法を教えてください
- メガメニューボタンにマウスオーバーしたときに指定したDIVが表示されるようにしたいです
- mm-divとmm-div2それぞれに別の位置が指定できるようなjQueryの記述方法を教えてください
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
回答がないみたいなので… >1つに連動してしまいます。 div要素の幅を計算するのに、tdi.width()を使っていますが、tdiは各メニュー下のdivの配列なので、widthの計算にはその最初の要素が使用されるようです。 (作者さんは、CSSでdivの幅を一律にするつもりなのでしょうから、これで問題はないのですが) このために、いつでも最初の要素の幅が計算に使われることになっているので、この部分の計算にそれぞれの要素の幅を参照するようにしてあげればよろしいかと。 一方、ご提示のスクリプトでは、表示する時に毎回位置の計算をするようになっていますが、divのサイズが動的に変化するのでもない限り毎回計算する必要はなく、最初に1度だけ計算するようにしたほうが効率的です。 そうすることで、animated()というメソッドの追加も必要なくなるので、イベント処理は単に対象divをfadeInするだけで済むようになると思われます。 >mm-divとmm-div2それぞれに別の位置が指定できる記述に仕方を教えてください。 サイズを指定したいのか位置を指定したいのかで変わってきますが、それぞれをCSSでちゃんと指定するのなら、スクリプトで位置を調整している部分をはずしてしまえばよいのでは? (基本の位置は基本のCSSで指定しておいて、特殊なものだけ個別指定するといった感じです。現状はCSSに指定が無いみたいなので、基本の部分を追加する必要はありますが) 表示/非表示の制御だけなら以下で済むでしょう。 (全角空白は半角に) $(function(){ var tli=$("ul#mm-ul > li.mm-li"); var tdi=$("div.mm-div",tli); tli.hover( function(){ tdi.hide(); $(this).children("div.mm-div").fadeIn("fast"); }, function(){ tdi.hide(); }); });
お礼
ご回答ありがとうございます! 効率のよいイベント処理教えてくださってありがとうございます! >この部分の計算にそれぞれの要素の幅を参照するようにしてあげればよろしいかと。 mm-divとmm-div2はCSSで幅だけ指定、jQueryで位置を指定するには どのようにしたらいいのでしょうか…;; 要素の幅を参照させるとありますが、記述に仕方がわからず… 勉強不足で本当に申し訳ないのですが、教えていただけないでしょうか。 mm-divを440pxとmm-div2を800pxでCSSに下記、 表示させる位置を思った位置になるよう指定したいのですが、 CSSでうまくマイナス位置に指定ができなかったので、 jQueryで位置を指定している箇所を .css("left","-400px") のように書いたら指定したら思った位置にできたので、 こちらを利用させていただこうと思ったのですが… イメージとして下記のように左側にmm-div、mm-div2を表示させるイメージです。 mm-divを指定したサブメニュー1 メニュー1(mm-li) mm-divを指定したサブメニュー2 メニュー2(mm-li) mm-div2を指定したサブメニュー3 メニュー3(mm-li) #megamenu{ margin:0; width:700px; /*ナビゲーターの最大横幅です。*/ } ul#mm-ul{ height:20px; padding:10px; padding-left:0; margin:0; } ul#mm-ul li.mm-li{ position:relative; display:inline; cursor:pointer; } ul#mm-ul li.mm-li div.mm-div{ display:none; position:absolute; /* -- divのサイズ指定 -- */ width:440px; padding:10px; border:solid 3px #000; /*-----------------------*/ ul#mm-ul li.mm-li div.mm-div2{ display:none; position:absolute; /* -- divのサイズ指定 -- */ width:800px; padding:10px; border:solid 3px #000; /*-----------------------*/
補足
すみません、CSSでの位置指定がわかりました! 教えていただいた記述で解決いたしました。 本当にありがとうございます!