jquery 手風(fēng)琴

效果

  • 點(diǎn)擊相應(yīng)卡片的標(biāo)簽憨降,那么就會(huì)切換至卡片的呈現(xiàn)
  • 如果點(diǎn)擊03標(biāo)簽,那么01 02 要一起移動(dòng)

5個(gè)效果圖片

基本HTML結(jié)構(gòu)如下:

  • 編寫(xiě)5個(gè)li標(biāo)簽母赵,包含span以及圖片
  • 設(shè)置絕對(duì)定位逸爵,溢出部分overflow:hidden進(jìn)行隱藏

基本5個(gè)li標(biāo)簽需要使用的絕對(duì)定位的居中技巧,使用lef:50%凹嘲,然后使用margin-lef: - 元素的一半寬度(詳情可以訪問(wèn)CSS 定位布局 - 絕對(duì)痊银、固定定位設(shè)置居中懸浮div)。

大概實(shí)現(xiàn)效果如下:

從上面的三個(gè)截圖可以看到5個(gè)li標(biāo)簽可以排列好了內(nèi)容和圖片了施绎,只要將超出第一個(gè)li標(biāo)簽范圍的進(jìn)行隱藏即可溯革。

使用overflow:hidden贞绳,隱藏溢出部分

每個(gè)li使用left屬性來(lái)改變位置,做出span標(biāo)簽部署有層疊的效果

下一步就是要做出這樣的層疊效果了致稀。

使用絕對(duì)定位以及l(fā)eft參數(shù)設(shè)定位置冈闭,就可以做出這個(gè)效果的了。

好了抖单,寫(xiě)到這里基本完成了HTML萎攒、CSS部分的代碼了,貼出源碼如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $(function(){

        })
    </script>
    <style type="text/css">
        * {
            margin: 0; 
            padding: 0;
            font-family: 'Miscrosoft Yahei';
            font-size: 14px;
        }

        .accordion_warp{
            width: 642px;
            height: 350px;
            position: absolute;
            margin-top:50px;
            margin-left: -321px;
            left: 50%;
            overflow: hidden;
        }

        .accordion {
            width: 3210px;
            list-style: none;
        }

        .accordion li,span,div{
            float: left;
        }

        .accordion li span{
            display: block;
            width: 20px;
            height: 350px;
            color: #fff;
            text-align: center;
        }

        .accordion li div{
            width: 622px;
            height: 350px;
        }

        .accordion li:nth-child(1) span{
            position: absolute;
            left: 0;
            background-color: #09E0B5;
        }

        .accordion li:nth-child(1) div{
            position: 20px;
            background: url("images/001.jpg");
        }

        .accordion li:nth-child(2) span{
            position: absolute;
            left: 562px;
            background-color: #3D7FBB;
        }

        .accordion li:nth-child(2) div{
            position: absolute;
            left: 582px;
            background: url("images/002.jpg");
        }

        .accordion li:nth-child(3) span{
            position: absolute;
            left: 582px;
            background-color: #5CA716;
        }

        .accordion li:nth-child(3) div{
            position: absolute;
            left: 602px;
            background: url("images/003.jpg");
        }

        .accordion li:nth-child(4) span{
            position: absolute;
            left: 602px;            
            background-color: #F28B24;
        }

        .accordion li:nth-child(4) div{
            position: absolute;
            left: 622px;
            background: url("images/004.jpg");
        }

        .accordion li:nth-child(5) span{
            position: absolute;
            left: 622px;
            background-color: #7C0070;
        }

        .accordion li:nth-child(5) div{
            position: absolute;
            left: 642px;
            background: url("images/005.jpg");
        }



    </style>
</head>
<body>
    <!-- ul.accordion>(li>span{非洲景色$}+div{這是div})*5 -->
    <div class="accordion_warp">
        <ul class="accordion">
            <li>
                <span>非洲景色1</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色2</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色3</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色4</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色5</span>
                <div></div>
            </li>
        </ul>
    </div>
    
</html>

下面就是用jquery去控制left的值矛绘,就可以實(shí)現(xiàn)手風(fēng)琴的效果了耍休。

根據(jù)jquery監(jiān)聽(tīng)每個(gè)標(biāo)簽的click事件,根據(jù)點(diǎn)擊的對(duì)象货矮,修改相應(yīng)的left值即可羊精。

根據(jù)點(diǎn)擊li標(biāo)簽,單個(gè)li標(biāo)簽向左移動(dòng)

此時(shí)囚玫,點(diǎn)擊每個(gè)li標(biāo)簽喧锦,就會(huì)自然向左移動(dòng)。

思路解析:根據(jù)點(diǎn)擊事件的$(this).index()就可以知道點(diǎn)擊的是哪個(gè)li抓督,然后再設(shè)置相應(yīng)的左移距離即可燃少。

存在BUG,當(dāng)跨li點(diǎn)擊铃在,中間部分的li標(biāo)簽不會(huì)一起向左移動(dòng)

當(dāng)點(diǎn)擊標(biāo)簽3阵具,效果如下:

這里可以看到標(biāo)簽2并沒(méi)有移動(dòng),這里就需要將標(biāo)簽3前面的所有l(wèi)i一起移動(dòng)才行定铜,需要使用prevAll()each()這個(gè)方法來(lái)處理阳液。

編寫(xiě)前面元素一起向左移動(dòng)的方法

可以看到打印出了前面兩個(gè)標(biāo)簽的索引 01,然后使用each()遍歷操作標(biāo)簽1和標(biāo)簽2的移動(dòng)宿稀。

下面來(lái)看看趁舀,如果點(diǎn)擊標(biāo)簽5赖捌,會(huì)是什么樣的效果祝沸,如下:

如果點(diǎn)擊標(biāo)簽5,那么也是會(huì)操作前面四個(gè)標(biāo)簽越庇。

那么下面剩下的最后的問(wèn)題就是罩锐,點(diǎn)擊標(biāo)簽也要同時(shí)向右移動(dòng)回去,這個(gè)該怎么處理呢卤唉?

首先寫(xiě)單個(gè)向右移動(dòng)的事件

如果需要向右移動(dòng)涩惑,那么就需要有條件判斷什么時(shí)候需要向右移動(dòng)。
簡(jiǎn)單來(lái)想的話桑驱,就是當(dāng)前l(fā)i的位置是處于左邊的位置竭恬,那么此時(shí)再點(diǎn)擊當(dāng)然就要向右了跛蛋。
那么判斷左邊的位置,就需要當(dāng)前l(fā)i的具體距離數(shù)值痊硕,首先打印一下看看是多少赊级,如下:

可以看到右邊的left數(shù)值 和 左邊的left數(shù)值。

考慮使用nextAll()each()來(lái)設(shè)置向右移動(dòng)的方法

點(diǎn)擊標(biāo)簽2岔绸,標(biāo)簽3 和 4 則自動(dòng)向右移動(dòng)理逊。

完成代碼如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $(".accordion li").click(function(){
                // alert( $(this).index() );

                // 1.點(diǎn)擊li,向左單個(gè)移動(dòng)盒揉。
                $(this).children('span').animate({
                    "left":$(this).index()*20,
                },1000)

                $(this).children('div').animate({
                    "left":($(this).index()+1)*20,
                },1000)

                // 2.處理之前的元素向左同時(shí)移動(dòng)
                if($(this).index()>1){
                    console.log("index > 1");
                    // console.log("pre index = " + ($(this).index()-1));
                    $(this).prevAll().each(function(i){
                        // 打印每個(gè)前面元素的index()索引
                        // console.log(i + " index=" + $(this).index());
                        // 已知前面元素的index()索引晋被,那么下面可以設(shè)置left的值了。
                        $(this).children('span').animate({
                            "left":$(this).index()*20,
                        },1000)

                        $(this).children('div').animate({
                            "left":($(this).index()+1)*20,
                        },1000)

                    })
                }

                // 3.編寫(xiě)標(biāo)簽單個(gè)向右移動(dòng)的方法
                console.log( $(this).index() + " left = " + $.trim($(this).children('span').css("left") ));
                console.log(typeof($(this).children('span').css("left")));

                if ( $.trim($(this).children('span').css("left")) == ($(this).index()*20 + "px") ) {
                    // 單個(gè)向右移動(dòng)部分
                    // alert("turn right!");
                    $(this).children('span').animate({
                        "left":542+$(this).index()*20,
                    },1000)

                    $(this).children('div').animate({
                        "left":542+(($(this).index()+1)*20),
                    },1000)

                    // 4.批量向右移動(dòng)
                    $(this).nextAll().each(function(){
                        $(this).children('span').animate({
                            "left":542+$(this).index()*20,
                        },1000)

                        $(this).children('div').animate({
                            "left":542+(($(this).index()+1)*20),
                        },1000)
                    })

                }

                

            })
        })
    </script>
    <style type="text/css">
        * {
            margin: 0; 
            padding: 0;
            font-family: 'Miscrosoft Yahei';
            font-size: 14px;
        }

        .accordion_warp{
            width: 642px;
            height: 350px;
            position: absolute;
            margin-top:50px;
            margin-left: -321px;
            left: 50%;
            overflow: hidden;
        }

        .accordion {
            width: 3210px;
            list-style: none;
        }

        .accordion li,span,div{
            float: left;
            cursor: pointer;
        }

        .accordion li span{
            display: block;
            width: 20px;
            height: 350px;
            color: #fff;
            text-align: center;
        }

        .accordion li div{
            width: 622px;
            height: 350px;
        }

        .accordion li:nth-child(1) span{
            position: absolute;
            left: 0;
            background-color: #09E0B5;
        }

        .accordion li:nth-child(1) div{
            position: 20px;
            background: url("images/001.jpg");
        }

        .accordion li:nth-child(2) span{
            position: absolute;
            left: 562px;
            background-color: #3D7FBB;
        }

        .accordion li:nth-child(2) div{
            position: absolute;
            left: 582px;
            background: url("images/002.jpg");
        }

        .accordion li:nth-child(3) span{
            position: absolute;
            left: 582px;
            background-color: #5CA716;
        }

        .accordion li:nth-child(3) div{
            position: absolute;
            left: 602px;
            background: url("images/003.jpg");
        }

        .accordion li:nth-child(4) span{
            position: absolute;
            left: 602px;            
            background-color: #F28B24;
        }

        .accordion li:nth-child(4) div{
            position: absolute;
            left: 622px;
            background: url("images/004.jpg");
        }

        .accordion li:nth-child(5) span{
            position: absolute;
            left: 622px;
            background-color: #7C0070;
        }

        .accordion li:nth-child(5) div{
            position: absolute;
            left: 642px;
            background: url("images/005.jpg");
        }



    </style>
</head>
<body>
    <!-- ul.accordion>(li>span{非洲景色$}+div{這是div})*5 -->
    <div class="accordion_warp">
        <ul class="accordion">
            <li>
                <span>非洲景色1</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色2</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色3</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色4</span>
                <div></div>
            </li>
            <li>
                <span>非洲景色5</span>
                <div></div>
            </li>
        </ul>
    </div>
    
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刚盈,一起剝皮案震驚了整個(gè)濱河市羡洛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扁掸,老刑警劉巖翘县,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谴分,居然都是意外死亡锈麸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)牺蹄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忘伞,“玉大人,你說(shuō)我怎么就攤上這事沙兰∶ツ危” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵鼎天,是天一觀的道長(zhǎng)舀奶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)斋射,這世上最難降的妖魔是什么育勺? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮罗岖,結(jié)果婚禮上涧至,老公的妹妹穿的比我還像新娘。我一直安慰自己桑包,他們只是感情好南蓬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般赘方。 火紅的嫁衣襯著肌膚如雪烧颖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天窄陡,我揣著相機(jī)與錄音倒信,去河邊找鬼。 笑死泳梆,一個(gè)胖子當(dāng)著我的面吹牛鳖悠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播优妙,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乘综,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了套硼?” 一聲冷哼從身側(cè)響起卡辰,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邪意,沒(méi)想到半個(gè)月后九妈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雾鬼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年萌朱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片策菜。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晶疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出又憨,到底是詐尸還是另有隱情翠霍,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布蠢莺,位于F島的核電站寒匙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏躏将。R本人自食惡果不足惜锄弱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耸携。 院中可真熱鬧棵癣,春花似錦辕翰、人聲如沸夺衍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沟沙。三九已至河劝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矛紫,已是汗流浹背赎瞎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颊咬,地道東北人务甥。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喳篇,于是被迫代替她去往敵國(guó)和親敞临。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5麸澜? 答:HTML5是最新的HTML標(biāo)準(zhǔn)挺尿。 注意:講述HT...
    kismetajun閱讀 27,453評(píng)論 1 45
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,742評(píng)論 1 92
  • Html 標(biāo)簽 斜體 粗體 單獨(dú)的樣式 引用文本 長(zhǎng)文本引用 換行 空格 分割線 地址信息 單行代碼 多行代碼 無(wú)...
    SunnySky_閱讀 553評(píng)論 0 5
  • 一炊邦、CSS入門(mén) 1编矾、css選擇器 選擇器的作用是“用于確定(選定)要進(jìn)行樣式設(shè)定的標(biāo)簽(元素)”。 有若干種形式的...
    寵辱不驚丶?xì)q月靜好閱讀 1,589評(píng)論 0 6
  • 焦點(diǎn)高級(jí)一期 洛陽(yáng) 杜紅平 堅(jiān)持分享第286天 今晚馁害,我的電腦開(kāi)不了機(jī)了窄俏。我的手機(jī)簡(jiǎn)書(shū)打不開(kāi),電腦又壞了碘菜,...
    隨喜Prajana閱讀 131評(píng)論 0 0