色々試してみたのですが、どうしてもわからず、
どうかお知恵をおかしください。
宜しくお願いいたします。
こちらの紹介サイトを参考に、メガメニューを作成しております。↓
http://codesign.verse.jp/jquery/2009/08/megamenu …
メガメニューボタンにマウスオーバーしたときに、
DIVに指定しているmm-div内のものが表示されるよう指定されているのですが、
そのメニューの中でいくつかmm-divのサイズを変更したく、
それに伴いjQueryで表示させる位置の指定を複数記述したいのですが、
jQueryを勉強不足のため、どうしてもうまくいきません。
mm-divはCSSでサイズを記述しているので、
別途指定するものとして新しいDIVに指定するタグとして
mm-div2を準備しましたが、1つに連動してしまいます。
説明べたで申し訳ありませんが、
mm-divとmm-div2それぞれに別の位置が指定できる記述に仕方を教えてください。
$(function(){
var target=$("div#megamenu");
var tli=$("ul#mm-ul > li.mm-li");
var tdi=$("div.mm-div",tli);
/*
if($.browser.msie && ($.browser.version<8)){
var th=;
}else{
var th=0;
}
*/
tli.hover(
function(){
$("*:animated",tdi).hide();
$(this).animated();
},
function(){
tdi.hide();
}
);
$.fn.animated=function(){
var posx=$(this).offset().left+tdi.width();
var posbase=tli.offset().left+target.width();
/*地味に計算するための場所orz
$("p#showpos").text(posx);
$("p#winwidth").text(posbase);
*/
tdi.hide();
if(posx>posbase){
$(this).children()
.css("left",-posx+target.width())
.css("top","25px")
.fadeIn("fast");
}else{
$(this).children()
.css("left","5px")
.css("top","25px")
.fadeIn("fast");
}
return $(this);
}
});
No.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;
/*-----------------------*/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSでreadonlyの機能はあり...
-
javascriptで複数の表示・非表...
-
javascriptでcssを書き換える方法
-
特定の条件のHTML要素を一括で...
-
formのsubmitを押すとモーダル...
-
もしかして
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
「PC Helpsoft Driver Updated...
-
CloseとDisposeの違い
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
アクセスVBAのMe!と[ ]
-
Do~Loopした回数をカウントしたい
-
VBA エンターキーでイベントに...
-
Excelシート上のマクロを登録し...
-
インタラクティブの反対語は?
-
こんなことてしますか??
-
ImageMagickでgif画像の一部が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Q&A掲示板の入力フォームに文字...
-
JavascriptでDom XSSの脆弱性対...
-
【JavaScript】検索がヒットし...
-
CSSでreadonlyの機能はあり...
-
JavascriptでXSSの脆弱性への対...
-
formのsubmitを押すとモーダル...
-
確認ダイアログを次からは表示...
-
JavascriptのHTMLクラス表示に...
-
特定の条件のHTML要素を一括で...
-
jQueryでのドラッグアンドドロ...
-
javascriptで複数の表示・非表...
-
jqueryを使ったスムーススクロ...
-
jqueryアコーディオンの上部の...
-
JavaScriptのdiv.style属性の変...
-
2回目以降のページロード時には...
-
javascriptのエラーで質問です。
-
改行をしたいが、<br>と...
-
クリックすると、色が変わるよ...
-
jQueryのCSSで値に変数を使う方法
-
動画の上に広告をオーバーレイ...
おすすめ情報