自適應(yīng)左右滑動(dòng)切換輪播

前端入坑紀(jì) 33

挖坑了哆档,最近忙著寫html5的小游戲蔽挠,少了更新。

這會(huì)兒瓜浸,乘著有空澳淑,稍微更新一個(gè)先前的輪播效果。

閑言少敘斟叼,直入正題偶惠。

又是一個(gè)輪播

OK春寿,first things first朗涩!項(xiàng)目鏈接

HTML 結(jié)構(gòu)
<div class="swipWrp">
    <div id="swiper" class="clear">
        ![](http://upload-images.jianshu.io/upload_images/4732938-8206bfad17390bb8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![](http://upload-images.jianshu.io/upload_images/4732938-3f4267d10670065a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![](http://upload-images.jianshu.io/upload_images/4732938-98b2e3cb7fc5798d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![](http://upload-images.jianshu.io/upload_images/4732938-90a0b25e3a601454.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    </div>
</div>

依舊簡(jiǎn)潔的div#swiper 寬度為400%(100%*4)包裹圖片,讓圖片向左浮動(dòng)绑改,并且寬度為25%(100%/4)谢床。而div.swipWrp是用來定位輪播里的小圓點(diǎn)的(代碼里生成)

CSS 結(jié)構(gòu)
        body {
            padding: 0;
            margin: 0;
            background-color: #F4F4F4;
        }
        
        p {
            padding: 0;
            margin: 0;
        }
        
        ul,
        li {
            padding: 0;
            margin: 0;
            list-style: none;
        }
        
        a {
            text-decoration: none;
            color: #525252;
        }
        
        img {
            vertical-align: middle;
        }
        
        .fl {
            float: left;
        }
        
        .fr {
            float: right;
        }
        
        .clear::after {
            display: block;
            content: "";
            clear: both;
        }

    .swipWrp {
            position: relative;
            width: 100%;
            margin: 0 auto;
            overflow: hidden;
            
        }
        
        #swiper {
            width: 400%;
            position: relative;
            overflow: hidden;
            text-align: center;
            transition: all 400ms ease-in;
            background-color: #ededed;
        }
        
        #swiper img {
            float: left;
            margin: 0 auto;
            width: 25%;
        }
        
        #tags {
            position: absolute;
            bottom: 0;
            left: 0;
            width: 100%;
            text-align: center;
        }
        
        #tags a {
            display: inline-block;
            transition: all 1s ease;
            width: 9px;
            height: 9px;
            margin: 3px 6px;
            border-radius: 4.5px;
            background-color: rgba(255, 255, 255, .5)
        }
        
        #tags a.on {
            transform: scale(1.2, 1.2);
            background-color: rgba(255, 255, 255, .85)
        }

輪播里的圖片和小圓點(diǎn)切換都加了過渡動(dòng)畫。至于從css開始到.clear類的那些都是重置樣式厘线,基本我的項(xiàng)目里都有识腿。小伙伴應(yīng)該很熟悉了。

JS 結(jié)構(gòu)
                var swiper = document.getElementById("swiper");// 獲取輪播本身
                var imgs = swiper.getElementsByTagName("img");// 獲取輪播里的圖片
                var indx = 0;// 輪播變換的順序id
                var timers = null;// 最開始設(shè)定存放計(jì)時(shí)器的變量

                                // 這里開始就是創(chuàng)建切換輪播時(shí)的小圓點(diǎn)
                var nodeFgmt = document.createDocumentFragment();// 創(chuàng)建個(gè)文檔片段造壮,存放接下來生產(chǎn)的html文檔
                newNode = document.createElement("div");// 創(chuàng)建個(gè)div
                newNode.id = "tags";// 給新的div一個(gè)id

                                // 根據(jù)圖片數(shù)創(chuàng)建相應(yīng)數(shù)量的a標(biāo)簽
                for(var i = 0; i < imgs.length; i++) {
                    var ond = document.createElement("a");
                    ond.href = "javascript:;";
                    ond.setAttribute("data-indx", i);// 給每個(gè)a設(shè)置自定義屬性“data-indx”
                    nodeFgmt.appendChild(ond);// 把所有的a加到之前創(chuàng)建的文檔片段里
                }
                newNode.appendChild(nodeFgmt);// 把文檔片段加到前面創(chuàng)建的div里

                swiper.parentNode.appendChild(newNode);// 給輪播的父級(jí)添加上面創(chuàng)建好的div#tags
                                
                                 
                var tagsA = document.getElementById("tags").getElementsByTagName("a");// 創(chuàng)建完就獲取里面的a吧

                                // 給a添加事件和切換的效果
                for(var s = 0; s < tagsA.length; s++) {
                    tagsA[s].onmouseover = function() {
                        offEft();
                        hideAll();
                        var indxA = this.getAttribute("data-indx");
                        changeEffect(indxA);
                        this.className = "on"
                    }
                    tagsA[s].onmouseout = function() {
                        onEft();
                    }
                }

                                // 默認(rèn)第一個(gè)a為選中
                tagsA[0].className = "on";


                                // 重置所有a的class為空渡讼,也就是都未不選中狀態(tài)
                function hideAll() {
                    for(var i = 0; i < imgs.length; i++) {
                        tagsA[i].className = ""
                    }
                }

                                // 調(diào)用輪播效果的代碼
                function scrollIntvel() {
                    timers = setInterval(function() {
                        hideAll()
                        if(indx < imgs.length - 1) {
                            indx++;
                        } else {
                            indx = 0;
                        }
                        changeEffect(indx);
                    }, 3600);
                }

                               // 輪播切換時(shí)的代碼
                function changeEffect(indx) {

                    swiper.style.transform = "translateX(-" + 25 * indx + "%)";
                    tagsA[indx].className = "on";

                }
                                
                              // 開啟效果
                function onEft() {
                    scrollIntvel()
                }

                              // 關(guān)閉效果
                function offEft() {
                    clearInterval(timers);
                }

                                
                scrollIntvel()  // 運(yùn)行調(diào)用輪播效果

                               // 左滑時(shí)的要執(zhí)行的效果
                function swiperLeft() {
                    hideAll();
                    if(indx > 0) {
                        indx--;
                    } else {
                        indx = imgs.length - 1;
                    }
                    changeEffect(indx);
                }


                                 // 右滑時(shí)的要執(zhí)行的效果
                function swiperRight() {
                    hideAll();
                    if(indx < imgs.length - 1) {
                        indx++;
                    } else {
                        indx = 0;
                    }
                    changeEffect(indx);
                }


                                 // 判斷左滑骂束,還是右滑,并執(zhí)行對(duì)應(yīng)效果

                var startX = endX = 0; // 先定義個(gè)存放x軸上的開始位置和結(jié)束位置的變量

                                 // 獲取開始觸摸時(shí)x軸位置成箫,并停止自動(dòng)輪播的效果
                swiper.addEventListener("touchstart", function(evt) {
                    startX =endX =  evt.targetTouches[0].clientX;
                    offEft();
                });

                                 // 獲取觸摸過程中x軸位置
                swiper.addEventListener("touchmove", function(evt) {
                    endX = evt.targetTouches[0].clientX;
                });

                                 // 滑動(dòng)結(jié)束時(shí)判斷方向展箱,執(zhí)行對(duì)應(yīng)效果,并開啟自動(dòng)輪播的效果
        swiper.addEventListener("touchend", function(evt) {
            if (endX - startX < -47) {
                swiperRight()
            } else if (endX - startX > 47) {
                swiperLeft()
            }
            onEft()
        });

因?yàn)槭峭诳拥挪赃@次代碼備注的也特別詳細(xì)混驰,不然感覺對(duì)不起小伙伴。那么有興趣的同學(xué)皂贩,可以好好研究一翻栖榨,期待你我共同進(jìn)步!C魉ⅰ婴栽!

好了,到此遮精,本文告一段落居夹!感謝您的閱讀!祝你身體健康本冲,闔家幸福准脂!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市檬洞,隨后出現(xiàn)的幾起案子狸膏,更是在濱河造成了極大的恐慌,老刑警劉巖添怔,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湾戳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡广料,警方通過查閱死者的電腦和手機(jī)砾脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艾杏,“玉大人韧衣,你說我怎么就攤上這事」荷#” “怎么了畅铭?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勃蜘。 經(jīng)常有香客問我硕噩,道長(zhǎng),這世上最難降的妖魔是什么缭贡? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任炉擅,我火速辦了婚禮辉懒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谍失。我一直安慰自己耗帕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布袱贮。 她就那樣靜靜地躺著仿便,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攒巍。 梳的紋絲不亂的頭發(fā)上嗽仪,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音柒莉,去河邊找鬼闻坚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兢孝,可吹牛的內(nèi)容都是我干的窿凤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼跨蟹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼雳殊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窗轩,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤夯秃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后痢艺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仓洼,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年堤舒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了色建。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舌缤,死狀恐怖箕戳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情友驮,我是刑警寧澤漂羊,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布驾锰,位于F島的核電站卸留,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏椭豫。R本人自食惡果不足惜耻瑟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一旨指、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喳整,春花似錦谆构、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至魏保,卻和暖如春熬尺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谓罗。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工粱哼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檩咱。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓揭措,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刻蚯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绊含,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,757評(píng)論 25 707
  • 之前網(wǎng)上有很多PhpStorm在線激活地址炊汹,但是基本上大多數(shù)都被封殺艺挪。其他激活方式又行不通(有知道的可以分享下),...
    794f64d7a292閱讀 9,804評(píng)論 0 0
  • 首先簡(jiǎn)單的介紹下什么是淘寶客,淘寶客呢就是幫淘寶店鋪推廣商品的一群人器钟,淘寶店主想要提高銷量津坑,增加商品權(quán)重, 會(huì)設(shè)置...
    大魚洋洋閱讀 371評(píng)論 0 1
  • 這里要分享的是我自己的真實(shí)故事梳凛。 大二的時(shí)候耿币,同學(xué)拉我去聽講座,認(rèn)識(shí)了前排坐的一個(gè)學(xué)姐韧拒,這位學(xué)姐在課間非常...
    淙音閱讀 1,103評(píng)論 13 26