5分鐘教你DIY簡(jiǎn)書首頁(yè)輪播插件

效果圖如下:

GIF.gif

源碼放在Github上了:

我是源碼

我是效果預(yù)覽

基本功能:

  1. 四張圖片循環(huán)播放虱颗;
  2. 無操作時(shí)自動(dòng)從左到右播放;
  3. 鼠標(biāo)放在輪播圖上時(shí)停止自動(dòng)輪播蔗喂,顯示左右按鈕忘渔;
  4. 按左按鈕,會(huì)顯示左邊的圖片缰儿,按右按鈕會(huì)顯示右邊的圖片畦粮;
  5. 鼠標(biāo)移出后,又從當(dāng)前開始自動(dòng)播放乖阵;
  6. 隨著圖片的移動(dòng)宣赔,下方的小長(zhǎng)條也會(huì)跟著移動(dòng);
  7. 點(diǎn)擊任意長(zhǎng)條义起,會(huì)直接跳轉(zhuǎn)至長(zhǎng)條對(duì)應(yīng)的圖片拉背。

原理介紹

圖片從右往左或者從左往右的切換很容易理解,難點(diǎn)在于如何實(shí)現(xiàn)循環(huán)播放默终。下面就講解循環(huán)播放的原理:

  1. 將要展示的圖片依次水平排列椅棺,本例一共要展示4副圖片


    Paste_Image.png
  2. 我們將要展示的圖片放置在可視窗口,其它圖片隱藏掉(背景色改為灰色齐蔽,代表隱藏)


    Paste_Image.png
  3. 由于可視窗口的位置是不能調(diào)整的含滴,所以我們通過整體的向左或向右移動(dòng)4副圖片來達(dá)到圖片切換的目的谈况。


    Paste_Image.png
  4. 但是當(dāng)窗口移動(dòng)到第一張圖片上時(shí),再往左切換就沒有圖片了缎脾,同樣最后一張圖片再往右切換也就沒有圖片了遗菠。但是我們的目的是到1號(hào)圖片后再往左移動(dòng)是4號(hào)圖片辙纬,再往左是3號(hào)……一直循環(huán)贺拣,到4號(hào)圖片再往右是1號(hào)圖纵柿,再往右是2號(hào)圖……一直循環(huán)。


    Paste_Image.png

    Paste_Image.png
  5. 為了達(dá)到上述目的委可,我們必須做些手腳了着倾!變化就是卡者,在1號(hào)圖左邊加了一張4號(hào)圖崇决,再4號(hào)圖右邊加了一張1號(hào)圖恒傻。

Paste_Image.png
  1. 是時(shí)候上演魔術(shù)戲法了盈厘!
    這時(shí)當(dāng)我們從1號(hào)圖往左切換時(shí)沸手,左邊就有了一張可供使用的4號(hào)圖替身,我們就可以營(yíng)造一種又回到了4號(hào)圖的假象跳仿。
Paste_Image.png

Paste_Image.png

這樣就毫無違和感了,但是如果用戶繼續(xù)向左拉動(dòng)怎么辦谨究?難不成再造一個(gè)3號(hào)圖替身泣棋?當(dāng)然不是潭辈,當(dāng)從1切換到4'這個(gè)動(dòng)畫執(zhí)行完畢后把敢,我們需要將4'瞬間切換到4修赞,因?yàn)槭撬查g柏副,中間是沒有緩慢的動(dòng)畫效果的,所以肉眼是感覺不到的眷篇,所以用戶其實(shí)毫無察覺蕉饼,但事實(shí)上我們已經(jīng)變成下圖了椎椰。

Paste_Image.png

這時(shí)候如果用戶接著向左移動(dòng)慨飘,4號(hào)圖是不是就可以接上3號(hào)圖了呢休弃!

Paste_Image.png

向右拉的道理也是一樣的圈膏,當(dāng)?shù)竭_(dá)1'后稽坤,我們要瞬間在換回1尿褪。
原理就是這樣了,下面開始分析代碼顿仇。

代碼實(shí)現(xiàn)

HTML+CSS

輪播的4張圖片放在ul的li里面臼闻,并利用浮動(dòng)使他們?cè)谝慌懦尸F(xiàn)(記得清除浮動(dòng)哦)囤采,前面的4號(hào)圖的復(fù)制品和后面的1號(hào)圖復(fù)制品是通過js添加上去的蕉毯,現(xiàn)在還沒有恕刘,但是也可以提前在html中寫好褐着,都一樣托呕。

Paste_Image.png

設(shè)置父容器的大小剛好等于一張圖片的大小馅扣,并且設(shè)置overflow:hidden將不顯示的圖片都隱藏掉(記得為父容器加上可愛的圓角)着降。

Paste_Image.png

利用兩個(gè)a鏈接做出按鈕的樣式蓄喇,使用絕對(duì)定位將他們放到合適的地方妆偏。

Paste_Image.png

再利用下面的ul中的li做出滾動(dòng)條的效果,使用絕對(duì)定位將他們放到合適的地方叔锐。


Paste_Image.png

靜態(tài)效果就做好了,接下來開始寫JS张吉,讓輪播具有靈魂。

JS

注:JS使用了jquery

首先在放置圖片的ul里面添加我們的備用圖片4'1'勺择∈『耍克隆4和1并將4放在列表的頭部气忠,將1放在列表的尾部旧噪。

var $page0 = $pages.eq(0).clone();
var $page3 = $pages.eq(3).clone();
$content.append($page0);
$content.prepend($page3);

為按鈕添加點(diǎn)擊事件脓匿,點(diǎn)擊按鈕可以使圖片向左或向右移動(dòng)陪毡。$btnPre顯示左邊的圖片(例如:當(dāng)前為2,點(diǎn)擊后切換至1)铁瞒,$btnNext顯示右邊的圖片(例如:當(dāng)前是2慧耍,點(diǎn)擊切換至3)蜂绎。stateLock防止用戶在一個(gè)切換動(dòng)畫沒完成時(shí)進(jìn)行過多的點(diǎn)擊。play()函數(shù)是執(zhí)行左右切換動(dòng)畫的函數(shù)怪瓶,可以向左也可以向右践美。

$btnPre.on("click",function(){
            if(!stateLock) return;
            stateLock = false;
            play($content,true);
        });

$btnNext.on("click",function(){
            if(!stateLock) return;
            stateLock = false;
            play($content,false)
        });

為底部滾動(dòng)條添加點(diǎn)擊事件敛滋。當(dāng)點(diǎn)擊滾動(dòng)條時(shí)绎晃,要做兩件事杂曲,一是將當(dāng)前圖片切換到滾動(dòng)條對(duì)應(yīng)的圖片擎勘,二是改變點(diǎn)擊的滾動(dòng)條的顏色棚饵,并將其他滾動(dòng)條恢復(fù)默認(rèn)色噪漾。

//底部長(zhǎng)條添加點(diǎn)擊事件
        $(".carousel").on("click","li",function () {
            $(this).siblings().removeClass("active");
            $(this).addClass("active");
            var liIndex = $(this).index();
            if(liIndex>pageIndex){
                play($content,false,liIndex-pageIndex);
            }else if(liIndex<pageIndex){
                play($content,true,pageIndex-liIndex);
            }
        });

添加自動(dòng)播放功能夺刑。每過2.5秒就自動(dòng)向右切換一張分别。

var auto1 = setInterval(function () {
            play($content,false);
        },2500);

為插件整體添加鼠標(biāo)移入移出事件耘斩。鼠標(biāo)移入時(shí)括授,做兩件事荚虚,一是關(guān)閉自動(dòng)播放功能梯澜,二是顯示向左向右的按鈕(其實(shí)在css樣式中渴析,這兩個(gè)按鈕是被隱藏掉的俭茧,上面說的顯示出來,是為了讓大家看清楚)午磁;鼠標(biāo)移出后迅皇,也做兩件事喧半,但是相反挺据,打開自動(dòng)播放功能扁耐,然后隱藏按鈕婉称。

//顯示按鈕
        $wrapper.on({
            mouseover:function () {
                clearInterval(auto1);
                $btnNext.show();
                $btnPre.show();
            },
            mouseout:function () {
                auto1 = setInterval(function () {
                    play($content,false);
                },2500);
                $btnNext.hide();
                $btnPre.hide();
            }
        });

播放函數(shù)王暗,傳入三個(gè)參數(shù)俗壹,$obj是6張圖片所在的父容器的jquery對(duì)象绷雏,dir是移動(dòng)方向(true是向前移動(dòng),false是向后移動(dòng))涎显,len是一次移動(dòng)的圖片張數(shù)坤检,默認(rèn)是1張。移動(dòng)的原理其實(shí)是改變父容器整體的絕對(duì)定位參數(shù)期吓,然后利用animate方法添加動(dòng)畫效果早歇。最后當(dāng)圖片移動(dòng)后不能忘記改變其對(duì)應(yīng)的滾動(dòng)條的背景色。

function play($obj,dir,len) {
            //dir :true 向前/false 向后
            if(len===undefined||len===null){
                len=1;
            }
            var symbol = dir?"+=":"-=";
            var backFlag = dir?-1:4;
            var clear = dir?3:0;
            var backIndex = dir?4:1;
            $obj.animate({
                left:symbol+len*pageWidth+"px"
            },function () {
                if(dir){
                    pageIndex -=len;
                    console.log(pageIndex);
                    if(pageIndex<backFlag+1){
                        pageIndex = clear;
                        $obj.css({
                            left:"-"+backIndex*pageWidth+"px"
                        })
                    }
                }else{
                    pageIndex +=len;
                    console.log(pageIndex);
                    if(pageIndex>backFlag-1){
                        pageIndex = clear;
                        $obj.css({
                            left:"-"+backIndex*pageWidth+"px"
                        })
                    }
                }
                $carousels.eq(pageIndex).siblings().removeClass("active");
                $carousels.eq(pageIndex).addClass("active");
                stateLock = true;
            })
        }

版權(quán)歸饑人谷和本人所有膘婶,轉(zhuǎn)載請(qǐng)注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缺前,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悬襟,更是在濱河造成了極大的恐慌衅码,老刑警劉巖脊岳,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿驾,死亡現(xiàn)場(chǎng)離奇詭異儡蔓,居然都是意外死亡获询,警方通過查閱死者的電腦和手機(jī)蹬铺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門印衔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蟹肘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我雾狈,道長(zhǎng)迁霎,這世上最難降的妖魔是什么寥袭? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任斋竞,我火速辦了婚禮钾军,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唇礁。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布挽荠。 她就那樣靜靜地躺著跃赚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摔竿,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天袁翁,我揣著相機(jī)與錄音抑钟,去河邊找鬼绰沥。 笑死喘垂,一個(gè)胖子當(dāng)著我的面吹牛非洲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肮疗,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炭分!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起而账,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汽烦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琅关,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡步氏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年坝锰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片删掀。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翔冀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出披泪,到底是詐尸還是另有隱情纤子,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布款票,位于F島的核電站控硼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏艾少。R本人自食惡果不足惜卡乾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缚够。 院中可真熱鬧幔妨,春花似錦、人聲如沸谍椅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雏吭。三九已至埂伦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間思恐,已是汗流浹背沾谜。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胀莹,地道東北人基跑。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像描焰,于是被迫代替她去往敵國(guó)和親媳否。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栅螟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件篱竭、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,072評(píng)論 25 707
  • 我喜歡過力图。 再見。 遇見的人多了掺逼,才覺得自己愈發(fā)不成熟吃媒。 要努力啊吕喘!
    大點(diǎn)聲我聽不見閱讀 190評(píng)論 0 0
  • 他懷抱著好奇心走近 一片剛退潮的海 海邊 他看到了滾滾的海浪 看到了小小碎碎的貝殼 看到小螃蟹忙忙碌碌地鉆進(jìn)鉆出 ...
    谷雨一一閱讀 536評(píng)論 0 0
  • 說明:該學(xué)習(xí)筆記參考《深入淺出Node.js》在學(xué)習(xí)過程中赘那,添加了自己的理解和適當(dāng)?shù)难a(bǔ)充!僅供參考氯质! NodeJs...
    秋意思寒閱讀 695評(píng)論 0 1