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

首頁(yè) > 編程 > JavaScript > 正文

原生js和jquery實(shí)現(xiàn)圖片輪播淡入淡出效果

2019-11-20 12:37:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

圖片輪播有很多種方式,這里采用其中的 淡入淡出形式

js原生和jQuery都可以實(shí)現(xiàn),jquery因?yàn)榉庋b了很多用法,所以用起來(lái)就簡(jiǎn)單許多,轉(zhuǎn)換成js使用,其實(shí)也就是用js原生模擬出這些用法。

但不管怎樣,構(gòu)造一個(gè)最基本的表現(xiàn)層是必須的

簡(jiǎn)單的圖片輪播一般由幾個(gè)部分構(gòu)成。

對(duì)于淡入淡出式

1.首先是個(gè)外圍部分(其實(shí)也就是最外邊的整體wrapper)

2.接著就是你設(shè)置圖片輪播的地方(也就是一個(gè)banner吧)

3.然后是一個(gè)圖片組(可以用新的div 也可以直接使用 ul-->li形式)

4.然后是一個(gè)透明背景層,放在圖片底部

5.然后是一個(gè)圖片描述info層,放在透明背景層的左下角(div 或 ul-->li)

6.然后是一個(gè)按鈕層,用來(lái)定位圖片組的index吧,放在透明背景層的右下角(div 或 ul-->li)

7.當(dāng)然了,有些時(shí)候還在圖片兩端放兩個(gè)箭頭 <  和 >  ,指示圖片輪播方向(這里先不用,如果要使用也同理)

由此,可以先構(gòu)造出html結(jié)構(gòu)

<div class="wrapper"><!-- 最外層部分 -->    <div class="banner"><!-- 輪播部分 -->      <ul class="imgList"><!-- 圖片部分 -->        <li class="imgOn"><a href="#"><img src="./img/test1.jpg" width="400px" height="200px" alt="puss in boots1"></a></li>      <li><a href="#"><img src="./img/test2.jpg" width="400px" height="200px" alt="puss in boots2"></a></li>      <li><a href="#"><img src="./img/test3.jpg" width="400px" height="200px" alt="puss in boots3"></a></li>      <li><a href="#"><img src="./img/test4.jpg" width="400px" height="200px" alt="puss in boots4"></a></li>      <li><a href="#"><img src="./img/test5.jpg" width="400px" height="200px" alt="puss in boots5"></a></li>      </ul>      <div class="bg"></div> <!-- 圖片底部背景層部分-->      <ul class="infoList"><!-- 圖片左下角文字信息部分 -->        <li class="infoOn">puss in boots1</li>        <li>puss in boots2</li>        <li>puss in boots3</li>        <li>puss in boots4</li>        <li>puss in boots5</li>      </ul>      <ul class="indexList"><!-- 圖片右下角序號(hào)部分 -->        <li class="indexOn">1</li>        <li>2</li>        <li>3</li>        <li>4</li>        <li>5</li>      </ul>    </div>  </div>

圖片部分的alt說(shuō)明即為infoList部分的信息內(nèi)容,有些時(shí)候就可以綁定一下下。要注意的是,imgList中圖片的寬度和高度最后馬上設(shè)定,如果在css中才統(tǒng)一設(shè)定會(huì)變慢一些。

我給三個(gè)部分的active都添加的對(duì)應(yīng)的on類(lèi),實(shí)際使用的時(shí)候可能不需要那么多active

接下來(lái)給它設(shè)置一下css樣式

<style type="text/css">  body,div,ul,li,a,img{margin: 0;padding: 0;}  ul,li{list-style: none;}  a{text-decoration: none;}  .wrapper{position: relative;margin: 30px auto;width: 400px;height: 200px;}  .banner{width: 400px;height: 200px;overflow: hidden;}  .imgList{width:400px;height:200px;z-index: 10;}  .imgList li{display: none;}  .imgList .imgOn{display: inline;}  .bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index:20;opacity: 0.4;filter:alpha(opacity=40);background: black;}  .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}  .infoList li{display: none;}  .infoList .infoOn{display: inline;color: white;}  .indexList{position: absolute;right: 10px;bottom: 5px;z-index: 30;}  .indexList li{float: left;margin-right: 5px;padding: 2px 4px;border: 2px solid black;background: grey;cursor: pointer;}  .indexList .indexOn{background: red;font-weight: bold;color: white;}</style>

說(shuō)明一下:

1、banner即為圖片輪播的范圍,這里設(shè)定為寬400高200,圖片的ul外圍也如此設(shè)置。

2、要顯示active項(xiàng),所以先統(tǒng)一所有l(wèi)i設(shè)置display:none,再添加個(gè)on類(lèi)設(shè)置 display:inline

3、因?yàn)楫?dāng)使用jquery的fadeIn()時(shí),是變化為display:list-item,所以要在banner那里加上overflow:hidden ,不然如果快速切換圖片的話,整體圖片高度會(huì)超出所給的高度。

4、要注意給每個(gè)部分添加 z-index值,防止被覆蓋無(wú)法展現(xiàn)出來(lái)的現(xiàn)象

寫(xiě)到這里,先檢查一下頁(yè)面是否已經(jīng)正確顯示出第一項(xiàng)。如果已經(jīng)顯示好,再增添js處理部分。

一、jQuery方式

1.有一個(gè)當(dāng)前圖片對(duì)應(yīng)的標(biāo)號(hào) curIndex = 0;

2.默認(rèn)會(huì)自動(dòng)輪播,所以默認(rèn)給其添加

var autoChange = setInterval(function(){     if(curIndex < $(".imgList li").length-1){       curIndex ++;     }else{       curIndex = 0;    }    //調(diào)用變換處理函數(shù)    changeTo(curIndex);   },2500);

默認(rèn)curIndex自增,之后重置為0

3.其中changeTo()函數(shù)切換

function changeTo(num){     $(".imgList").find("li").removeClass("imgOn").hide().eq(num).fadeIn().addClass("imgOn");    $(".infoList").find("li").removeClass("infoOn").eq(num).addClass("infoOn");    $(".indexList").find("li").removeClass("indexOn").eq(num).addClass("indexOn");  }

看著辦吧..

4.然后當(dāng)鼠標(biāo)滑入滑出右下角的下標(biāo)時(shí)也要處理

  $(".indexList").find("li").each(function(item){     $(this).hover(function(){       clearInterval(autoChange);      changeTo(item);      curIndex = item;    },function(){       autoChange = setInterval(function(){         if(curIndex < $(".imgList li").length-1){           curIndex ++;         }else{           curIndex = 0;        }        //調(diào)用變換處理函數(shù)        changeTo(curIndex);       },2500);    });  });

滑入清除定時(shí)器,并進(jìn)行圖片切換處理。然后設(shè)置curIndex為當(dāng)前item(這個(gè)要注意別忘了)

滑出重置定時(shí)器,還原默認(rèn)狀態(tài)了

這樣一來(lái),淡入淡出就完成了。

完整代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>圖片輪播 jq(淡入淡出)</title><style type="text/css">  body,div,ul,li,a,img{margin: 0;padding: 0;}  ul,li{list-style: none;}  a{text-decoration: none;}  .wrapper{position: relative;margin: 30px auto;width: 400px;height: 200px;}  .banner{width: 400px;height: 200px;overflow: hidden;}  .imgList{width:400px;height:200px;z-index: 10;}  .imgList li{display: none;}  .imgList .imgOn{display: inline;}  .bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index:20;opacity: 0.4;filter:alpha(opacity=40);background: black;}  .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}  .infoList li{display: none;}  .infoList .infoOn{display: inline;color: white;}  .indexList{position: absolute;right: 10px;bottom: 5px;z-index: 30;}  .indexList li{float: left;margin-right: 5px;padding: 2px 4px;border: 2px solid black;background: grey;cursor: pointer;}  .indexList .indexOn{background: red;font-weight: bold;color: white;}</style></head><body>  <div class="wrapper"><!-- 最外層部分 -->    <div class="banner"><!-- 輪播部分 -->      <ul class="imgList"><!-- 圖片部分 -->        <li class="imgOn"><a href="#"><img src="./img/test1.jpg" width="400px" height="200px" alt="puss in boots1"></a></li>      <li><a href="#"><img src="./img/test2.jpg" width="400px" height="200px" alt="puss in boots2"></a></li>      <li><a href="#"><img src="./img/test3.jpg" width="400px" height="200px" alt="puss in boots3"></a></li>      <li><a href="#"><img src="./img/test4.jpg" width="400px" height="200px" alt="puss in boots4"></a></li>      <li><a href="#"><img src="./img/test5.jpg" width="400px" height="200px" alt="puss in boots5"></a></li>      </ul>      <div class="bg"></div> <!-- 圖片底部背景層部分-->      <ul class="infoList"><!-- 圖片左下角文字信息部分 -->        <li class="infoOn">puss in boots1</li>        <li>puss in boots2</li>        <li>puss in boots3</li>        <li>puss in boots4</li>        <li>puss in boots5</li>      </ul>      <ul class="indexList"><!-- 圖片右下角序號(hào)部分 -->        <li class="indexOn">1</li>        <li>2</li>        <li>3</li>        <li>4</li>        <li>5</li>      </ul>    </div>  </div>  <script type="text/javascript" src="./js/jquery.min.js"></script>  <script type="text/javascript">  var curIndex = 0; //當(dāng)前index     //  alert(imgLen);     // 定時(shí)器自動(dòng)變換2.5秒每次  var autoChange = setInterval(function(){     if(curIndex < $(".imgList li").length-1){       curIndex ++;     }else{       curIndex = 0;    }    //調(diào)用變換處理函數(shù)    changeTo(curIndex);   },2500);  $(".indexList").find("li").each(function(item){     $(this).hover(function(){       clearInterval(autoChange);      changeTo(item);      curIndex = item;    },function(){       autoChange = setInterval(function(){         if(curIndex < $(".imgList li").length-1){           curIndex ++;         }else{           curIndex = 0;        }        //調(diào)用變換處理函數(shù)        changeTo(curIndex);       },2500);    });  });  function changeTo(num){     $(".imgList").find("li").removeClass("imgOn").hide().eq(num).fadeIn().addClass("imgOn");    $(".infoList").find("li").removeClass("infoOn").eq(num).addClass("infoOn");    $(".indexList").find("li").removeClass("indexOn").eq(num).addClass("indexOn");  }  </script></body></html>

二、js原生方式

原生方式大致來(lái)說(shuō)就是模擬jquery

因?yàn)槲矣昧颂嗟腸lass,所以要增加一些class的處理函數(shù)(可以用id,應(yīng)該會(huì)更便捷)

通過(guò)class名取標(biāo)簽元素(注意了,因?yàn)楝F(xiàn)在我只針對(duì)于標(biāo)簽有一個(gè)class的來(lái)說(shuō),多個(gè)class應(yīng)該會(huì)出錯(cuò))

  //通過(guò)class獲取節(jié)點(diǎn)  function getElementsByClassName(className){     var classArr = [];    var tags = document.getElementsByTagName('*');    for(var item in tags){       if(tags[item].nodeType == 1){         if(tags[item].getAttribute('class') == className){           classArr.push(tags[item]);        }      }    }    return classArr; //返回  }

模擬jq的addClass和removeClass

  // 判斷obj是否有此class  function hasClass(obj,cls){  //class位于單詞邊界    return obj.className.match(new RegExp('(//s|^)' + cls + '(//s|$)'));   }   //給 obj添加class  function addClass(obj,cls){     if(!this.hasClass(obj,cls)){        obj.className += cls;    }  }  //移除obj對(duì)應(yīng)的class  function removeClass(obj,cls){     if(hasClass(obj,cls)){       var reg = new RegExp('(//s|^)' + cls + '(//s|$)');         obj.className = obj.className.replace(reg,'');    }  }

再模擬jq的fadeIn和fadeOut函數(shù)

  //淡入處理函數(shù)  function fadeIn(elem){     setOpacity(elem,0); //初始全透明    for(var i = 0;i<=20;i++){ //透明度改變 20 * 5 = 100      (function(){         var level = i * 5;  //透明度每次變化值        setTimeout(function(){           setOpacity(elem, level)        },i*25); //i * 25 即為每次改變透明度的時(shí)間間隔,自行設(shè)定      })(i);     //每次循環(huán)變化一次    }  }    //淡出處理函數(shù)  function fadeOut(elem){     for(var i = 0;i<=20;i++){ //透明度改變 20 * 5 = 100      (function(){         var level = 100 - i * 5; //透明度每次變化值        setTimeout(function(){           setOpacity(elem, level)        },i*25); //i * 25 即為每次改變透明度的時(shí)間間隔,自行設(shè)定      })(i);     //每次循環(huán)變化一次    }  }

其中設(shè)置透明度函數(shù)的處理形式

    //設(shè)置透明度  function setOpacity(elem,level){     if(elem.filters){       elem.style.filter = "alpha(opacity="+level+")";    }else{       elem.style.opacity = level / 100;    }  }

然后就是基本部分的用法了

先初始化經(jīng)常用到的變量以及圖片的自動(dòng)切換

    var curIndex = 0, //當(dāng)前index      imgArr = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //獲取圖片組      imgLen = imgArr.length,      infoArr = getElementsByClassName("infoList")[0].getElementsByTagName("li"), //獲取圖片info組      indexArr = getElementsByClassName("indexList")[0].getElementsByTagName("li"); //獲取控制index組     // 定時(shí)器自動(dòng)變換2.5秒每次  var autoChange = setInterval(function(){     if(curIndex < imgLen -1){       curIndex ++;     }else{       curIndex = 0;    }    //調(diào)用變換處理函數(shù)    changeTo(curIndex);   },2500);  //調(diào)用添加事件處理  addEvent();    

其中的changeTo就是處理函數(shù),addEvent就是給右下角的那些按鈕設(shè)定事件處理

//變換處理函數(shù)  function changeTo(num){     //設(shè)置image    var curImg = getElementsByClassName("imgOn")[0];    fadeOut(curImg); //淡出當(dāng)前 image    removeClass(curImg,"imgOn");    addClass(imgArr[num],"imgOn");    fadeIn(imgArr[num]); //淡入目標(biāo) image    //設(shè)置image 的 info    var curInfo = getElementsByClassName("infoOn")[0];    removeClass(curInfo,"infoOn");    addClass(infoArr[num],"infoOn");    //設(shè)置image的控制下標(biāo) index    var _curIndex = getElementsByClassName("indexOn")[0];    removeClass(_curIndex,"indexOn");    addClass(indexArr[num],"indexOn");  } //給右下角的圖片index添加事件處理 function addEvent(){  for(var i=0;i<imgLen;i++){     //閉包防止作用域內(nèi)活動(dòng)對(duì)象item的影響    (function(_i){     //鼠標(biāo)滑過(guò)則清除定時(shí)器,并作變換處理    indexArr[_i].onmouseover = function(){       clearTimeout(autoChange);      changeTo(_i);      curIndex = _i;    };    //鼠標(biāo)滑出則重置定時(shí)器處理    indexArr[_i].onmouseout = function(){       autoChange = setInterval(function(){       if(curIndex < imgLen -1){         curIndex ++;      }else{         curIndex = 0;      }    //調(diào)用變換處理函數(shù)      changeTo(curIndex);     },2500);    };     })(i);  }}

如此一來(lái),原生版的也完成了

完整代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>圖片輪播 js原生(淡入淡出)</title><style type="text/css">  body,div,ul,li,a,img{margin: 0;padding: 0;}  ul,li{list-style: none;}  a{text-decoration: none;}  .wrapper{position: relative;margin: 30px auto;width: 400px;height: 200px;}  .banner{width: 400px;height: 200px;overflow: hidden;}  .imgList{width:400px;height:200px;z-index: 10;}  .imgList li{display: none;}  .imgList .imgOn{display: inline;}  .bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index:20;opacity: 0.4;filter:alpha(opacity=40);background: black;}  .infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}  .infoList li{display: none;}  .infoList .infoOn{display: inline;color: white;}  .indexList{position: absolute;right: 10px;bottom: 5px;z-index: 30;}  .indexList li{float: left;margin-right: 5px;padding: 2px 4px;border: 2px solid black;background: grey;cursor: pointer;}  .indexList .indexOn{background: red;font-weight: bold;color: white;}</style></head><body>  <div class="wrapper"><!-- 最外層部分 -->    <div class="banner"><!-- 輪播部分 -->      <ul class="imgList"><!-- 圖片部分 -->        <li class="imgOn"><a href="#"><img src="./img/test1.jpg" width="400px" height="200px" alt="puss in boots1"></a></li>      <li><a href="#"><img src="./img/test2.jpg" width="400px" height="200px" alt="puss in boots2"></a></li>      <li><a href="#"><img src="./img/test3.jpg" width="400px" height="200px" alt="puss in boots3"></a></li>      <li><a href="#"><img src="./img/test4.jpg" width="400px" height="200px" alt="puss in boots4"></a></li>      <li><a href="#"><img src="./img/test5.jpg" width="400px" height="200px" alt="puss in boots5"></a></li>      </ul>      <div class="bg"></div> <!-- 圖片底部背景層部分-->      <ul class="infoList"><!-- 圖片左下角文字信息部分 -->        <li class="infoOn">puss in boots1</li>        <li>puss in boots2</li>        <li>puss in boots3</li>        <li>puss in boots4</li>        <li>puss in boots5</li>      </ul>      <ul class="indexList"><!-- 圖片右下角序號(hào)部分 -->        <li class="indexOn">1</li>        <li>2</li>        <li>3</li>        <li>4</li>        <li>5</li>      </ul>    </div>  </div>  <script type="text/javascript">  var curIndex = 0, //當(dāng)前index      imgArr = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //獲取圖片組      imgLen = imgArr.length,      infoArr = getElementsByClassName("infoList")[0].getElementsByTagName("li"), //獲取圖片info組      indexArr = getElementsByClassName("indexList")[0].getElementsByTagName("li"); //獲取控制index組     // 定時(shí)器自動(dòng)變換2.5秒每次  var autoChange = setInterval(function(){     if(curIndex < imgLen -1){       curIndex ++;     }else{       curIndex = 0;    }    //調(diào)用變換處理函數(shù)    changeTo(curIndex);   },2500);  //調(diào)用添加事件處理  addEvent();  //給右下角的圖片index添加事件處理 function addEvent(){  for(var i=0;i<imgLen;i++){     //閉包防止作用域內(nèi)活動(dòng)對(duì)象item的影響    (function(_i){     //鼠標(biāo)滑過(guò)則清除定時(shí)器,并作變換處理    indexArr[_i].onmouseover = function(){       clearTimeout(autoChange);      changeTo(_i);      curIndex = _i;    };    //鼠標(biāo)滑出則重置定時(shí)器處理    indexArr[_i].onmouseout = function(){       autoChange = setInterval(function(){       if(curIndex < imgLen -1){         curIndex ++;      }else{         curIndex = 0;      }    //調(diào)用變換處理函數(shù)      changeTo(curIndex);     },2500);    };     })(i);  }}  //變換處理函數(shù)  function changeTo(num){     //設(shè)置image    var curImg = getElementsByClassName("imgOn")[0];    fadeOut(curImg); //淡出當(dāng)前 image    removeClass(curImg,"imgOn");    addClass(imgArr[num],"imgOn");    fadeIn(imgArr[num]); //淡入目標(biāo) image    //設(shè)置image 的 info    var curInfo = getElementsByClassName("infoOn")[0];    removeClass(curInfo,"infoOn");    addClass(infoArr[num],"infoOn");    //設(shè)置image的控制下標(biāo) index    var _curIndex = getElementsByClassName("indexOn")[0];    removeClass(_curIndex,"indexOn");    addClass(indexArr[num],"indexOn");  }    //設(shè)置透明度  function setOpacity(elem,level){     if(elem.filters){       elem.style.filter = "alpha(opacity="+level+")";    }else{       elem.style.opacity = level / 100;    }  }  //淡入處理函數(shù)  function fadeIn(elem){     setOpacity(elem,0); //初始全透明    for(var i = 0;i<=20;i++){ //透明度改變 20 * 5 = 100      (function(){         var level = i * 5;  //透明度每次變化值        setTimeout(function(){           setOpacity(elem, level)        },i*25); //i * 25 即為每次改變透明度的時(shí)間間隔,自行設(shè)定      })(i);     //每次循環(huán)變化一次    }  }    //淡出處理函數(shù)  function fadeOut(elem){     for(var i = 0;i<=20;i++){ //透明度改變 20 * 5 = 100      (function(){         var level = 100 - i * 5; //透明度每次變化值        setTimeout(function(){           setOpacity(elem, level)        },i*25); //i * 25 即為每次改變透明度的時(shí)間間隔,自行設(shè)定      })(i);     //每次循環(huán)變化一次    }  }  //通過(guò)class獲取節(jié)點(diǎn)  function getElementsByClassName(className){     var classArr = [];    var tags = document.getElementsByTagName('*');    for(var item in tags){       if(tags[item].nodeType == 1){         if(tags[item].getAttribute('class') == className){           classArr.push(tags[item]);        }      }    }    return classArr; //返回  }  // 判斷obj是否有此class  function hasClass(obj,cls){  //class位于單詞邊界    return obj.className.match(new RegExp('(//s|^)' + cls + '(//s|$)'));   }   //給 obj添加class  function addClass(obj,cls){     if(!this.hasClass(obj,cls)){        obj.className += cls;    }  }  //移除obj對(duì)應(yīng)的class  function removeClass(obj,cls){     if(hasClass(obj,cls)){       var reg = new RegExp('(//s|^)' + cls + '(//s|$)');         obj.className = obj.className.replace(reg,'');    }  }  </script></body></html>

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 达州市| 浦江县| 定安县| 陆川县| 青冈县| 洛宁县| 金坛市| 望奎县| 尖扎县| 竹溪县| 临洮县| 丰县| 宁阳县| 曲沃县| 南雄市| 临泽县| 永宁县| 黔东| 和硕县| 台中市| 宿迁市| 达拉特旗| 六安市| 黑山县| 环江| 江山市| 昆明市| 广昌县| 新平| 丰镇市| 海阳市| 赫章县| 客服| 保德县| 长子县| 科尔| 平南县| 莒南县| 沧源| 德州市| 赞皇县|