国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jquery 實現輪播圖詳解及實例代碼

2019-11-20 08:46:02
字體:
來源:轉載
供稿:網友

輪播圖:

接觸jquery也有一段時間了,今天剛好利用輪播圖來練練手。博文的前面會介紹一個簡單用jquery做輪播圖的例子,中間會插入一些關于輪播圖更多的思考,在后面會用Javascript的方法來寫一個輪播圖,最后則是關于jquery和Javascript的比較。輪播圖的效果可以點擊如下鏈接查看:http://sandbox.runjs.cn/show/t07kscph

jquery做輪播圖的例子:

html部分代碼:

<!DOCTYPE html><html>  <head>    <meta charset="UTF-8">    <title>輪播圖</title>    <link rel="stylesheet" type="text/css" href="demo.css"/>    <script src="../jquery/jquery-2.1.1.min.js" type="text/javascript" charset="utf-8"></script>    <script src="demo.js" type="text/javascript" charset="utf-8"></script>  </head>  <body>    <div id="igs">      <a class="ig" href="#"><img src="images/1.jpg"/></a>      <a class="ig" href="#"><img src="images/2.jpg"/></a>      <a class="ig" href="#"><img src="images/3.jpg"/></a>      <a class="ig" href="#"><img src="images/4.jpg"/></a>      <a class="ig" href="#"><img src="images/5.jpg"/></a>            <div class="btn btn1"><</div>      <div class="btn btn2">></div>            <ul id="tabs">        <li class="tab">1</li>        <li class="tab">2</li>        <li class="tab">3</li>        <li class="tab">4</li>        <li class="tab">5</li>      </ul>    </div>  </body></html>

css部分代碼:

* {  margin: 0;  padding: 0;}#igs {  margin: 10px auto;  width: 700px;  height: 320px;  position: relative;}.ig {  position: absolute;}#tabs {  position: absolute;  list-style: none;  background-color: rgba(255,255,255,.5);  left: 300px;  bottom: 10px;  border-radius: 10px;  padding: 5px 0 5px 5px;}.tab{  float: left;  text-align: center;  line-height: 20px;  width: 20px;  height: 20px;  cursor: pointer;  overflow: hidden;  margin-right: 4px;  border-radius: 100%;  background-color: rgb(200,100,150);}.btn{  position: absolute;  color: #fff;  top: 110px;  width: 40px;  height: 100px;  background-color: rgba(255,255,255,.3);  font-size: 40px;  font-weight: bold;  text-align: center;  line-height: 100px;  border-radius: 5px;  margin: 0 5px;}.btn2{  position: absolute;  right: 0px;}.btn:hover{  background-color: rgba(0,0,0,.7);}
 

js部分代碼:

//定義全局變量和定時器var i = 0 ;var timer;$(document).ready(function(){  //用jquery方法設置第一張圖片顯示,其余隱藏  $('.ig').eq(0).show().siblings('.ig').hide();    //調用showTime()函數(輪播函數)  showTime();    //當鼠標經過下面的數字時,觸發兩個事件(鼠標懸停和鼠標離開)  $('.tab').hover(function(){    //獲取當前i的值,并顯示,同時還要清除定時器    i = $(this).index();    Show();    clearInterval(timer);  },function(){    //    showTime();  });    //鼠標點擊左側的箭頭  $('.btn1').click(function(){    clearInterval(timer);    if(i == 0){      i = 5;//注意此時i的值    }    i--;    Show();    showTime();  });    //鼠標點擊右側的箭頭  $('.btn2').click(function(){    clearInterval(timer);    if(i == 4){      i = -1;//注意此時i的值    }    i++;    Show();    showTime();  });  });//創建一個showTime函數function showTime(){  //定時器  timer = setInterval(function(){    //調用一個Show()函數    Show();    i++;    //當圖片是最后一張的后面時,設置圖片為第一張    if(i==5){      i=0;    }  },2000);}//創建一個Show函數function Show(){  //在這里可以用其他jquery的動畫  $('.ig').eq(i).fadeIn(300).siblings('.ig').fadeOut(300);    //給.tab創建一個新的Class為其添加一個新的樣式,并且要在css代碼中設置該樣式  $('.tab').eq(i).addClass('bg').siblings('.tab').removeClass('bg');    /*   * css中添加的代碼:   * .bg{ background-color: #f00; }   * */}

完成效果圖:

完成效果,點擊如下鏈接即可查看:http://sandbox.runjs.cn/show/t07kscph

關于jquery做輪播圖更多的思考

思考一:在第七行代碼中用jquery方法設置第一張圖片顯示,其余隱藏,我們還有沒有其他方法可以實現?

思路:通過jquery的篩選器來實現

代碼示例:

$("#igs a:not(:first-child)").hide();

擴展:這樣來看的話,在a標簽中的class我們都可以省略,于此同時我們對于jquery選擇器的了解要更深入。

思考二:在第64行代碼中,我們創建了一個Show函數,在這里我們只能看到簡單的效果,我們能不能將我們的動畫效果做的更炫?

思路:用jquery中的自定義動畫,為其設置多個動畫效果

代碼示例:

//代碼提示:可以用fadeIn()、fadeOut()、fadeTo()、animate()等,具體實現方法請查閱相關資料 

思考三:如果我們在原來的基礎上在增加一張或多張圖片,我們又要修改我們的代碼了,我們可不可以將該段代碼適用到更多的輪播圖中?

思路:我們在前面設置一個計數器count,通過DOM的方法獲取到圖片的數量

代碼示例:

var count;$(document).ready(function(){  count= $(".main a").length; /*給動態變化的i備用*/;  //。。。代碼省略    //鼠標點擊左側的箭頭  $('.btn1').click(function(){    clearInterval(timer);    if(i == 0){      i = count;//注意此時i的值    }    i--;    Show();    showTime();  });    //鼠標點擊右側的箭頭  $('.btn2').click(function(){    clearInterval(timer);    //console.log(count-1);    if(i == count-1){      i = -1;//注意此時i的值    }    i++;    Show();    showTime();  });  });

 用原生Javascript方法寫一個簡單的輪播圖

 html部分代碼:

<div id="container">  <div id="list" style="left: -600px;">    <img src="img/5.jpg" alt="1"/>    <img src="img/1.jpg" alt="1"/>    <img src="img/2.jpg" alt="2"/>    <img src="img/3.jpg" alt="3"/>    <img src="img/4.jpg" alt="4"/>    <img src="img/5.jpg" alt="5"/>    <img src="img/1.jpg" alt="5"/>  </div>  <div id="buttons">    <span index="1" class="on"></span>    <span index="2"></span>    <span index="3"></span>    <span index="4"></span>    <span index="5"></span>  </div>  <a href="javascript:;" id="prev" class="arrow"><</a>  <a href="javascript:;" id="next" class="arrow">></a></div>

js部分代碼: 

<script type="text/javascript">    /* 知識點:    */    /*    this用法 */    /*    DOM事件 */    /*    定時器 */    window.onload = function () {      var container = document.getElementById('container');      var list = document.getElementById('list');      var buttons = document.getElementById('buttons').getElementsByTagName('span');      var prev = document.getElementById('prev');      var next = document.getElementById('next');      var index = 1;      var timer;      function animate(offset) {        //獲取的是style.left,是相對左邊獲取距離,所以第一張圖后style.left都為負值,        //且style.left獲取的是字符串,需要用parseInt()取整轉化為數字。        var newLeft = parseInt(list.style.left) + offset;        list.style.left = newLeft + 'px';        //無限滾動判斷        if (newLeft > -600) {          list.style.left = -3000 + 'px';        }        if (newLeft < -3000) {          list.style.left = -600 + 'px';        }      }      function play() {        //重復執行的定時器        timer = setInterval(function () {          next.onclick();        }, 2000)      }      function stop() {        clearInterval(timer);      }      function buttonsShow() {        //將之前的小圓點的樣式清除        for (var i = 0; i < buttons.length; i++) {          if (buttons[i].className == "on") {            buttons[i].className = "";          }        }        //數組從0開始,故index需要-1        buttons[index - 1].className = "on";      }      prev.onclick = function () {        index -= 1;        if (index < 1) {          index = 5        }        buttonsShow();        animate(600);      };      next.onclick = function () {        //由于上邊定時器的作用,index會一直遞增下去,我們只有5個小圓點,所以需要做出判斷        index += 1;        if (index > 5) {          index = 1        }        animate(-600);        buttonsShow();      };      for (var i = 0; i < buttons.length; i++) {        (function (i) {          buttons[i].onclick = function () {            /* 這里獲得鼠標移動到小圓點的位置,用this把index綁定到對象buttons[i]上,去谷歌this的用法 */            /* 由于這里的index是自定義屬性,需要用到getAttribute()這個DOM2級方法,去獲取自定義index的屬性*/            var clickIndex = parseInt(this.getAttribute('index'));            var offset = 600 * (index - clickIndex); //這個index是當前圖片停留時的index            animate(offset);            index = clickIndex; //存放鼠標點擊后的位置,用于小圓點的正常顯示            buttonsShow();          }        })(i)      }      container.onmouseover = stop;      container.onmouseout = play;      play();    }  </script>

jquery和Javascript方法的比較

 經過比較,我們不難看出,jquery方法比我們的Javascript方法寫的代碼要少得多。事實上,直接用Javascript省略了好多問題,比如說兼容性的問題(該示例沒有做測試,只是用來做比較);還有,如果當class的值有兩個,中間用空格隔開,那么我們用DOM該如何操作(思路:用正則表達式和數組的相關方法),這樣我們的代碼量會更多;如果我們想要更改動畫效果,我們需要修改的地方也很多,而從前面的介紹,我們知道,想要修改動畫效果直接修改調用的動畫函數就行了……

后面的話:

這篇博文記錄自己思維多一點,其中很多方法的具體實現效果都還沒寫?,F在邊學習jquery邊復習前面學過的Javascript,越來越覺得Javascript強大了(其實是自己弱爆了),好多東西都值得去深究,越來越覺得這個東西有意思了。

感謝大家閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 子洲县| 黄梅县| 垣曲县| 海林市| 东明县| 平和县| 叶城县| 龙口市| 陆川县| 温州市| 钦州市| 惠水县| 富阳市| 墨江| 凯里市| 武汉市| 宣恩县| 浦县| 贵港市| 南丹县| 雅江县| 锡林浩特市| 遵化市| 青浦区| 香河县| 从江县| 偃师市| 望都县| 博野县| 斗六市| 太谷县| 兖州市| 禄丰县| 昌邑市| 安龙县| 金山区| 佳木斯市| 五常市| 昌黎县| 栖霞市| 南安市|