Jquery和純JS實(shí)現(xiàn)輪播圖--左右切換式

一、頁面結(jié)構(gòu)
對于左右切換式的輪播圖的結(jié)構(gòu)主要分為以下幾個(gè)部分:
1、首先是個(gè)外圍部分(其實(shí)也就是最外邊的整體wrapper)
2、其次就是你設(shè)置圖片輪播的地方(也就是一個(gè)container吧)
3、然后是一個(gè)圖片組(可以用新的div 也可以直接使用 ul–>li形式)
4宁舰、然后是圖片兩端的左箭頭和右箭頭
7、然后是一個(gè)按鈕層奢浑,用來定位圖片組的index吧,一般放在圖片的下方(div 或 ul–>li)

<div id="warpper">
        <div class="container">
            <!-- 圖片區(qū)域 -->
            <ul class="imgList">
                <li><img src="./images/img1.jpg" alt=""></li>
                <li><img src="./images/img2.jpg" alt=""></li>
                <li><img src="./images/img3.jpg" alt=""></li>
                <li><img src="./images/img4.jpg" alt=""></li>
                <li><img src="./images/img5.jpg" alt=""></li>
                <li><img src="./images/img6.jpg" alt=""></li>
            </ul>
            <!-- 左右切換圖標(biāo) -->
            <img src="./images/pre.png" width="40px" height="60px" class="pre">
            <img src="./images/next.png" width="40px" height="60px" class="next">
            <!-- 下方控制圖片按鈕 -->       
            <ul class="dollList">
                <li class="sec"><a href="#"></a></li>
                <li><a href="#"></a></li>
                <li><a href="#"></a></li>
                <li><a href="#"></a></li>
                <li><a href="#"></a></li>
                <li><a href="#"></a></li>
            </ul>
        </div> 
    </div>

二蛮艰、CSS樣式
左右切換式則是采用圖片li 浮動(dòng),父層元素ul 總寬為總圖片寬雀彼,并設(shè)定為有限container寬度下隱藏超出寬度的部分;然后當(dāng)想切換到某序號的圖片時(shí)壤蚜,則采用其ul 定位 left樣式設(shè)定相應(yīng)屬性值實(shí)現(xiàn)
比如顯示第一張圖片初始定位left為0px, 要想顯示第二張圖片則需要left:-800px 處理;;

<style>
        *{ margin: 0; padding: 0; }
        ul{ list-style: none; }
        a{ text-decoration: none; }

        #warpper{ width: 800px; height: 600px; margin: 20px auto;}
        .container{ width: 100%; height: 100%; overflow: hidden; position: relative; }

        .imgList{ width: 4800px; position: absolute; z-index: 5; }
        .imgList>li{ float: left; width: 800px; height: 600px; }
        .imgList>li>img{ width: 100%; height: 100%; }

        .pre,.next{ position: absolute; top: 275px; background: rgba(220,220,220,0.7); padding: 10px 0; z-index: 100; opacity: 0.6; filter: alpha(opacity=60); }
        .pre:hover,.next:hover{ cursor: pointer; opacity: 1; filter: alpha(opacity=100); }
        .pre{ left: 10px; }
        .next{ right: 10px; }

        .dollList{ width:180px;  position: absolute; z-index: 10; bottom: 20px; left: 310px ; }
        .dollList li{ float: left; margin-right: 10px; }
        .dollList li.sec a{ background: orange; }
        .dollList li a{ width: 15px; height: 15px; background: rgba(230,230,230,0.6); border-radius: 50%; display: inline-block;  }
</style>

三、JS處理
(1)jquery處理:

    <script>
        $(function(){
            //設(shè)置全局變量
            var cur = 0;    //當(dāng)前的圖片序號
                imgLen = $(".imgList li").length;  //獲取圖片的數(shù)量
                timer = null;   //設(shè)置定時(shí)定時(shí)器的名字详羡,方便后面關(guān)閉

            //當(dāng)鼠標(biāo)移到向左和向右的圖標(biāo)上關(guān)閉定時(shí)器,離開時(shí)則重置定時(shí)器
            $(".pre,.next").hover(function(){
                clearInterval( timer );
            },function(){
                changeImg( );
            });

            //當(dāng)鼠標(biāo)移到圖片上關(guān)閉定時(shí)器嘿悬,離開時(shí)則重置定時(shí)器
            $(".imgList").hover(function(){
                clearInterval( timer );
            },function(){
                changeImg( );
            });

            //點(diǎn)擊向左圖標(biāo)根據(jù)cur進(jìn)行上一個(gè)圖片處理
            $(".pre").click(function(){
                cur = cur>0 ? (--cur) : (imgLen-1);
                changeTo( cur );
            });

            //點(diǎn)擊向右圖標(biāo)根據(jù)cur進(jìn)行上一個(gè)圖片處理
            $(".next").click(function(){
                cur = cur<( imgLen-1 ) ? (++cur) : 0;
                changeTo( cur );
            });

            //為下方的圓點(diǎn)按鈕綁定事件
            $(".dollList li").hover(function(){
                clearInterval(timer);
                var index = $(this).index();
                cur = index
                changeTo(cur);
            },function(){
                changeImg();
            });

            //封裝圖片自動(dòng)播放函數(shù)
            function changeImg(){

                timer = setInterval(function(){
                    if( cur<imgLen-1 ){
                        cur++;
                    }else{
                        cur=0;
                    }
                    changeTo( cur );
                },2000);        
            }

            //調(diào)用函數(shù)
            changeImg();

            //圖片切換函數(shù)
            function changeTo( num ){
                var go = num*800;
                $(".imgList").animate({ "left" : -go },500);
                $(".dollList").find("li").removeClass("sec").eq(num).addClass("sec");

            }

        });
    </script>

jquery這樣就能實(shí)現(xiàn)左右切換式輪播圖了实柠,簡便,原生JS代碼量就有些多了善涨;
(2)原生JS處理:

<script>
    var cur = 0, //當(dāng)前的圖片序號
      imgLis = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //獲取圖片組
      imgLen = imgLis.length,   //獲取圖片的數(shù)量
      timer = null; //設(shè)置定時(shí)定時(shí)器的名字窒盐,方便后面關(guān)閉
      dollLis = getElementsByClassName("dollList")[0].getElementsByTagName("li"); //獲取下方圓點(diǎn)

  //封裝圖片自動(dòng)播放函數(shù)
  function changeImg(){ 
      timer = setInterval(function(){ 
        if(cur < imgLen -1){ 
          cur ++;
        }else{ 
        cur = 0;
        }
        //調(diào)用變換處理函數(shù)
        changeTo(cur); 
      },2500);
  }
  changeImg();

  //調(diào)用添加事件處理
  addEvent();

  //給左右箭頭和右下角的圖片index添加事件處理
 function addEvent(){
  for(var i=0;i<imgLen;i++){ 
    //閉包防止作用域內(nèi)活動(dòng)對象item的影響
    (function(_i){ 
    //鼠標(biāo)滑過則清除定時(shí)器,并作變換處理
    dollLis[_i].onmouseover = function(){ 
      clearTimeout(timer);
      changeTo(_i);
      cur = _i;
    };
    //鼠標(biāo)滑出則重置定時(shí)器處理
    dollLis[_i].onmouseout = function(){ 
      changeImg();
    };
     })(i);
  }

  //給左箭頭prev添加上一個(gè)事件
  var pre = getElementsByClassName("pre")[0];
  pre.onmouseover = function(){ 
    //滑入清除定時(shí)器
    clearIntervcural(timer);
  };
  pre.onclick = function(){ 
    //根據(jù)curIndex進(jìn)行上一個(gè)圖片處理
    cur = (cur > 0) ? (--cur) : (imgLen - 1);
    changeTo(cur);
  };
  pre.onmouseout = function(){ 
    //滑出則重置定時(shí)器
    changeImg();
  };

   //給右箭頭next添加下一個(gè)事件
  var next = getElementsByClassName("next")[0];
  next.onmouseover = function(){ 
    clearInterval(timercur);
  };
  next.onclick = function(){ 
    cur = (cur < imgLen - 1) ? (++cur) : 0;
    changeTo(cur);
  };
  next.onmouseout = function(){ 
    changeImg();
  };
}

  //左右切換處理函數(shù)
  function changeTo(num){ 
    //設(shè)置image
    var imgList = getElementsByClassName("imgList")[0];
    goLeft(imgList,num*800); //左移一定距離

    //設(shè)置image的控制下標(biāo) index
    var _curIndex = getElementsByClassName("sec")[0];
    removeClass(_curIndex,"sec");
    addClass(dollLis[num],"sec");
  }

  //圖片組相對原始左移dist px距離
  function goLeft(elem,dist){ 
    if(dist == 800){ //第一次時(shí)設(shè)置left為0px 或者直接使用內(nèi)嵌法 style="left:0;"
      elem.style.left = "0px";
    }
    var toLeft; //判斷圖片移動(dòng)方向是否為左
    dist = dist + parseInt(elem.style.left); //圖片組相對當(dāng)前移動(dòng)距離
    if(dist<0){  
      toLeft = false;
      dist = Math.abs(dist);
    }else{ 
      toLeft = true;
    }
    for(var i=0;i<= dist/20;i++){ //這里設(shè)定緩慢移動(dòng)钢拧,10階每階80px
      (function(_i){ 
        var pos = parseInt(elem.style.left); //獲取當(dāng)前l(fā)eft
        setTimeout(function(){ 
          pos += (toLeft)? -(_i * 20) : (_i * 20); //根據(jù)toLeft值指定圖片組位置改變
          //console.log(pos);
          elem.style.left = pos + "px";
        },_i * 25); //每階間隔50毫秒
      })(i);
    }
  }
</script>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟹漓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子源内,更是在濱河造成了極大的恐慌葡粒,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嗽交,居然都是意外死亡卿嘲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門夫壁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拾枣,“玉大人,你說我怎么就攤上這事盒让∶贩簦” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵邑茄,是天一觀的道長姨蝴。 經(jīng)常有香客問我,道長撩扒,這世上最難降的妖魔是什么似扔? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮搓谆,結(jié)果婚禮上炒辉,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好贴膘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布幢踏。 她就那樣靜靜地躺著,像睡著了一般缝裤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颊郎,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天憋飞,我揣著相機(jī)與錄音,去河邊找鬼姆吭。 笑死榛做,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的内狸。 我是一名探鬼主播检眯,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昆淡!你這毒婦竟也來了锰瘸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昂灵,失蹤者是張志新(化名)和其女友劉穎避凝,沒想到半個(gè)月后舞萄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恕曲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年鹏氧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佩谣。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡把还,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茸俭,到底是詐尸還是另有隱情吊履,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布调鬓,位于F島的核電站艇炎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腾窝。R本人自食惡果不足惜缀踪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虹脯。 院中可真熱鬧驴娃,春花似錦、人聲如沸循集。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咒彤。三九已至疆柔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镶柱,已是汗流浹背旷档。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歇拆,地道東北人鞋屈。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像查吊,于是被迫代替她去往敵國和親谐区。 傳聞我的和親對象是個(gè)殘疾皇子湖蜕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5逻卖? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,489評論 1 45
  • 請參看我github中的wiki昭抒,不定期更新评也。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,131評論 2 19
  • 1. tab列表折疊效果 html: 能源系統(tǒng)事業(yè)部 崗位名稱: 工作地點(diǎn) 崗位名...
    lilyping閱讀 1,867評論 0 1
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式炼杖。設(shè)計(jì)者無需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級特性。 1....
    LaBaby_閱讀 1,174評論 0 1
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式盗迟。設(shè)計(jì)者無需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級特性坤邪。 1....
    LaBaby_閱讀 1,341評論 0 2