1

私は多くのJSを知りません。すでに独自の検索を行っていましたが、答えを見つけることができませんでした。だから私はここで尋ねています、そしてあなたが私を助けてくれることを願っています.

div タグ ( http://www.adobe.com/など) に基づいてナビゲーション メニューを作成し、jQuery を使用して「ホバー時に表示/非表示」の機能を作成しようとしています。

シンプルな Div 構造:

<div id='menu'>
    <div> Level 1 a
            <div> Level 2 a </div> 
            <div> Level 2 b </div> 
    </div>
    <div> Level 1 b
            <div> Level 2 c </div> 
            <div> Level 2 d </div> 
    </div>
</div>

関数を使用する必要があることを理解してい$('#menu').hover()ます。私の質問は、ID「メニュー」を1つだけ使用する場合、どの実際のメニューリストがホバーされているかを判断するためにどのように、またはどのような機能を使用できるのですか??

お気に入り:

$("#menu").hover(                        // Div Menu is being hovered
    function () {
        // $el = Determine which menu inside of Div Menu is actually being hovered
        // $el.show();
    },
    function () {
        $el..hide();
    }
);

または、私の構造が完全に間違っている可能性があります。これを行うには別の方法を使用する必要がありますか? 助けてください。

4

4 に答える 4

3
$("#menu").hover(                        // Div Menu is being hovered
    function (event) {
        $el = $(event.target);
        $el.show();
    },
    function (event) {
        $el = $(event.target);
        $el.hide();
    }
);
于 2012-12-21T01:58:01.613 に答える
1

実はhoverイベントはありません。2つの異なるモデルには多くの異なるマウスイベントがあり、それらは内部要素からトリガーされる点で異なります。幸い、jQueryのhoverメソッド(実際にはmouseenterおよびmouseleave)はこれを抽象化し、親要素がホバーされたときにのみハンドラーを起動します。

これは、ハンドラーをメニューツリーのすべての要素にバインドする必要があることを意味します。

$("#menu div").hover(
    function (event) {
        console.log(event);
        $(this).children().show();
    },
    function (event) {
        $(this).children().hide();
    }
);

jsfiddle.netでのデモ

于 2012-12-21T02:04:23.083 に答える
1

Amazon のようなフライアウト垂直メニューが必要な場合は、この例を確認してください。シンプルで、html と css だけで、jquery はありません。似ていますね。

HTML:

<ul class="nav">
<li>
    <a href="#">
        <strong>MP3s &amp; Cloud Player</strong> 18 million songs, play anywhere
    </a>
</li>
<li>
    <a href="#">
        <strong>MP3s &amp; Cloud Player</strong> 18 million songs, play anywhere
    </a>
    <ul>
        <li>
            <a href="#">
                <strong>Your Cloud Drive</strong> Anythign digital, securely stored, available anywhere
            </a>
        </li>
        <li>
            <a href="#">
                <strong>Learn more about cloud</strong>                </a>
        </li>
    </ul>
    <span class="cover"></span>
</li>
<li>
    <a href="#">
        <strong>Kindle</strong>
    </a>
</li>
</ul>​

CSS:

ul.nav{
font-size: 10px;
font-family: Verdana, Helvetica;
width: 200px;
background: #edf7ff;      
}

ul.nav li{
padding: 5px 4px;   
border: 1px solid #85abc9;
margin-bottom: -1px;
position: relative;
background: url(http://www.qualitymetric.com/Portals/0/images/orange_arrow.png) no-    repeat 185px center;
}

ul.nav > li:hover{
background: #fff;
border: 1px solid #999;
z-index:1;
box-shadow: 0px 1px 0px #999;
-moz-box-shadow: 0px 1px 0px #999;
}

ul.nav > li:hover > span{
width: 5px;
height: 100%;
background: #fff;
position: absolute;
top: 0px;
bottom: 0px;
right: 15px;
z-index: 10;
}

ul.nav li a{
color: #666;
text-decoration: none;
}

ul.nav li a strong{
font-size: 11px;
color: #333;
font-weight: bold;
display: block;
}

/* dropdown */

ul.nav li ul{
width: 200px;
padding-left: 12px;
background: #fff;
border: 1px solid #999;
position: absolute;
border-radius: 4px;
-moz-border-radius: 4px;
box-shadow: 1px 1px 0px #999;
-moz-box-shadow: 1px 1px 0px #999;
top: -1px;
left: 180px;
z-index: 9;
display: none;
}

ul.nav li:hover > ul{
display: block;           
}

ul.nav li ul li{
border: none;
padding-left: 12px;
background: url(http://www.qualitymetric.com/Portals/0/images/orange_arrow.png) no-    repeat 0px 6px;
}

ul.nav li ul li a strong{
font-weight: normal;
color: #034995;
}

ここでコードとデモを見てください: http://jsfiddle.net/blackpla9ue/KHLgm/8/ 好きなように編集したり追加したりできます。</p>

于 2012-12-21T03:25:07.753 に答える
1

はい、div をホバーするタイミングを決定するために作成したコードを使用できます。次に、ドロップダウン メニューを表示する関数をトリガーします。ナビゲーションバーの css を定義する際、最初に表示する必要のない部分を display:hidden; に設定する必要があります。div 内にあるため、非表示になっています。次に、jquery を使用して、プロパティの表示を変更するコードを css に挿入します。例を挙げます。「hidden」という div を作成し、これを他の可能なスタイルの中で css に設定すると仮定しましょう: #hidden { display:hidden }

次に、マウスをホバーしたときに「hidden」という ID のパーツが表示されるようにします。以下を使用できます。

$("#hidden").hover.css('display', 'block')

隠れた部分が現れます。とにかく、jquery を使わずに css だけで簡単にドロップダウン メニューを作成できます。ここで例を挙げます: html ファイルにこのマークアップがあるとしましょう。

<ul id="nav">
<li>
    <a href="#">Home</a>
</li>

<li>
    <a href="#">About</a>
    <ul>
        <li><a href="#">The product</a></li>

        <li><a href="#">Meet the team</a></li>
    </ul>
</li>
<li>
    <a href="#">Services</a>

    <ul>
        <li><a href="#">Sevice one</a></li>
        <li><a href="#">Sevice two</a></li>

        <li><a href="#">Sevice three</a></li>
        <li><a href="#">Sevice four</a></li>
    </ul>

</li>
<li>
    <a href="#">Product</a>
    <ul>
        <li><a href="#">Small product (one)</a></li>

        <li><a href="#">Small product (two)</a></li>
        <li><a href="#">Small product (three)</a></li>
        <li><a href="#">Small product (four)</a></li>

        <li><a href="#">Big product (five)</a></li>
        <li><a href="#">Big product (six)</a></li>
        <li><a href="#">Big product (seven)</a></li>

        <li><a href="#">Big product (eight)</a></li>
        <li><a href="#">Enourmous product (nine)</a></li>
        <li><a href="#">Enourmous product (ten)</a></li>

        <li><a href="#">Enourmous product (eleven)</a></li>
    </ul>
</li>
<li>
    <a href="#">Contact</a>

    <ul>
        <li><a href="#">Out-of-hours</a></li>
        <li><a href="#">Directions</a></li>

    </ul>
</li>
</ul>

ここでわかるように、マークアップはネストされた一連の「ul」にすぎません。詳細な ID/クラス、div はなく、リッチでセマンティックなコードのみです。

#nav ul には一連の li が含まれ、ドロップダウンを必要とするものには別の ul が含まれます。ドロップダウン ul にはクラスがないことに注意してください。これは、カスケードを使用してこれらのスタイルを設定し、マークアップをよりクリーンに保つためです。

今CSS:

#nav{
list-style:none;
font-weight:bold;
margin-bottom:10px;
/* Clear floats */
float:left;
width:100%;
/* Bring the nav above everything else--uncomment if needed.
position:relative;
z-index:5;
*/
}
#nav li{
float:left;
margin-right:10px;
position:relative;
}
#nav a{
display:block;
padding:5px;
color:#fff;
background:#333;
text-decoration:none;
}
#nav a:hover{
color:#fff;
background:#6b0c36;
text-decoration:underline;
}

/*--- DROPDOWN ---*/
#nav ul{
background:#fff; /* Adding a background makes the dropdown work properly in IE7+.     Make this as close to your page's background as possible (i.e. white page == white background). */
background:rgba(255,255,255,0); /* But! Let's make the background fully transparent      where we can, we don't actually want to see it if we can help it... */
list-style:none;
position:absolute;
left:-9999px; /* Hide off-screen when not needed (this is more accessible than     display:none;) */
}
#nav ul li{
padding-top:1px; /* Introducing a padding between the li and the a give the   illusion spaced items */
float:none;
}
#nav ul a{
white-space:nowrap; /* Stop text wrapping and creating multi-line dropdown items */
}
#nav li:hover ul{ /* Display the dropdown on hover */
left:0; /* Bring back on-screen when needed */
}
#nav li:hover a{ /* These create persistent hover states, meaning the top-most link stays 'hovered' even when your cursor has moved down the list. */
background:#6b0c36;
text-decoration:underline;
}
#nav li:hover ul a{ /* The persistent hover state does however create a global style for links even before they're hovered. Here we undo these effects. */
text-decoration:none;
}
#nav li:hover ul li a:hover{ /* Here we define the most explicit hover states--what happens when you hover each individual link. */
background:#333;
}

したがって、ネストされた順序なしリストといくつかの css を使用すると、効果的なドロップダウン メニューを作成できます。それが私によると最善の解決策です。物事を作る方法が簡単であればあるほど、それはより良いものになるからです。

ドロップダウン メニューの詳細と完全な説明とデモについては、http://csswizardry.com/2011/02/creating-a-pure-css-dropdown-menu/ にアクセスしてください。

もちろん、お好みに合わせて色やスタイルを設定できます。

于 2012-12-21T02:25:41.843 に答える