JQuery實(shí)現(xiàn)二級(jí)菜單,stop方法分析

效果圖

完整效果圖

一、HTML

    <div class="wrapper">
        <ul class="nav">
            <li>
                <a href="#">明星</a>
                <ul class="detail">
                    <li><a href="#">胡歌</a></li>
                    <li><a href="#">黃曉明</a></li>
                    <li><a href="#">馬思純</a></li>
                </ul>
            </li>
            <li>
                <a href="#">演員</a>
                <ul class="detail">
                    <li><a href="#">李幼斌</a></li>
                    <li><a href="#">何冰</a></li>
                    <li><a href="#">胡軍</a></li>
                </ul>
            </li>
            <li>
                <a href="#">歌手</a>
                <ul class="detail">
                    <li><a href="#">蔡徐坤</a></li>
                    <li><a href="#">吳亦凡</a></li>
                    <li><a href="#">鹿晗</a></li>
                </ul>
            </li>
        </ul>
    </div>

二、CSS

CSS沒(méi)有什么,只需要稍微關(guān)注一下提到的細(xì)節(jié)點(diǎn)就行了。

        * {margin: 0px;padding: 0px;}
        
        ul {list-style-type: none;}
        
        a {text-decoration: none;color: black;}

        .wrapper {width: 300px;}

        .wrapper ul.nav::after {
            content: "";
            display: block;
            clear: both;
        }

        .wrapper ul li {
            height: 30px;
            /*  此處height是功能實(shí)現(xiàn)的關(guān)鍵,固定高度height==line-hieght使得:
             *  當(dāng)ul.detail display時(shí)呈現(xiàn)overflow效果,不會(huì)額外占據(jù)地方,不會(huì)將wrapper撐大,
             */
            float: left;
            text-align: center;
            font-size: 14px;
            width: 100px;
            line-height: 30px;
            background-color: rgb(88, 187, 190);
            cursor: pointer;
        }

        .wrapper ul li:hover{color: white;}

        .wrapper ul li ul.detail {display: none;}

        .wrapper ul li ul li {background-color: rgb(129, 221, 224);}

        .wrapper ul li ul li:hover {background-color: rgb(178, 246, 248);}

細(xì)節(jié)點(diǎn):

  • 一級(jí)菜單是float:left,因此需要使用偽元素after清除浮動(dòng)流;
  • .wrapper ul li 需要設(shè)置 height==line-height ,使得當(dāng)二級(jí)菜單顯示時(shí)不會(huì)講wrapper撐大,導(dǎo)致影響到后續(xù)元素的位置;固定height使得顯示的二級(jí)菜單成為overflow的那部分;效果對(duì)比如下:
    • height == line-height == 30px


      height == line-height == 30px
    • height未指定,line-height==30px


      height未指定,line-height==30px

三、JQuery

    <script src="http://libs.baidu.com/jquery/1.7.1/jquery.min.js"></script>
    <script>
        $(function () {
            // stop很重要,試驗(yàn)了好久.......這種寫(xiě)法算是比較滿意的動(dòng)畫(huà)效果
            $("div ul.nav>li").mouseenter(function () {
                $(this).find(".detail").stop(true, true)
                    .show("fast");
            }).mouseleave(function () {
                $(this).find(".detail").hide("fast");
            })
        });
    </script>

重點(diǎn):

  • JQuery中動(dòng)畫(huà)隊(duì)列的消除,stop方法的應(yīng)用;
    • 直接使用不帶參數(shù),stop()方法會(huì)結(jié)束當(dāng)前正字啊進(jìn)行的動(dòng)畫(huà),并立即執(zhí)行隊(duì)列中的下一個(gè)動(dòng)畫(huà)。
    • stop()方法有兩個(gè)參數(shù),第一個(gè)參數(shù)clearQueue,將其設(shè)置為true,則會(huì)將當(dāng)前元素接下來(lái)的尚未執(zhí)行完的動(dòng)畫(huà)隊(duì)列都清空。
    • 第二個(gè)參數(shù)gotoEnd,將其設(shè)置為true,可以用于讓正在執(zhí)行的動(dòng)畫(huà)直接到達(dá)結(jié)束時(shí)刻的狀態(tài),通常用于后一個(gè)動(dòng)畫(huà)需要基于前一個(gè)動(dòng)畫(huà)的末狀態(tài)的情況。
  • 網(wǎng)上很多代碼的處理都是直接使用.stop().show("fast")以及.stop().hide("fast")但是在我暴力測(cè)試之下發(fā)現(xiàn) 有致命bug:在緩慢情況下能正常使用,在快速劃過(guò)時(shí)會(huì)出錯(cuò)。
    stop()+stop()
  • 那么.stop().show("fast")+.hide("fast")呢? 實(shí)驗(yàn)表明也會(huì)有bug
    stop()+null
  • 那么.stop(true).show("fast")+.stop(true).hide("fast")呢?有bug
    .stop(true)+.stop(true)
  • 那么.stop(true).show("fast")+.hide("fast")呢?有bug
    .stop(true)+null
  • 等等等等、、、后續(xù)的就不在測(cè)試了..
  • 最后我得到的最佳方法就是.stop(true,true).show("fast")+.hide("fast"),效果最佳,無(wú)bug
    .stop(true,true)+null

完整代碼:鏈接:https://pan.baidu.com/s/1BavI1UGR_PzUPMernS4xmg 提取碼:f0oa

本文為作者原創(chuàng),未經(jīng)允許,不得轉(zhuǎn)載,違者必究!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容