亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

原生JS實現圖片輪播與淡入效果的簡單實例

2019-11-20 09:11:10
字體:
來源:轉載
供稿:網友

最近對css的興趣提不起來,因為以前對圖片輪播一直耿耿于懷苦于學藝不精,所以,花了點時間熟悉了一下js。然后一條道走到黑,用jquery和js寫了一下輪播和圖片淡入的效果。以后學習的路很長,希望自己在前端的路上越走越遠`(∩_∩)′

從原理來講,網上的教程有很多,簡單來說。   

淡入淡出,其實這里只用到了淡入的效果。每一張淡入的圖片,我們將它的display設置為block,其他為none,所以實際存在并且在文檔流占位置的只有一張圖片。在設置圖片的display方式之前,將圖片的透明度逐漸增大,就會給人一種淡入的感覺。

其實在js代碼中,還有關鍵的一點,代碼中用到了閉包,因此,才對閉包有了一點點認識。在這里多說幾句吧:

閉包的官方”的解釋是:閉包是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。

比較簡單的說法是:

當函數a的內部函數b被函數a外的一個變量引用的時候,就創建了一個閉包。

說的更透徹一些。所謂“閉包”,就是在構造函數體內定義另外的函數作為目標對象的方法函數,而這個對象的方法函數反過來引用外層函數體中的臨時變量。這使得只要目標對象在生存期內始終能保持其方法,就能間接保持原構造函數體當時用到的臨時變量值。

盡管最開始的構造函數調用已經結束,臨時變量的名稱也都消失了,但在目標對象的方法內卻始終能引用到該變量的值,而且該值只能通這種方法來訪問。即使再次調用相同的構造函數,但只會生成新對象和方法,新的臨時變量只是對應新的值,和上次那次調用的是各自獨立的。

下面這個函數就是一個閉包函數。為什么要用閉包?普通函數不可以嗎?真的是不可以。這里閉包的作用是保持對flag的引用。如果不用閉包,對于局部變量來說,只要函數執行了一次,也就是flag執行了一次,這個局部變量就會被垃圾回收機制回收清理掉,而我們通過間歇調用中的函數引用flag變量,在第二次執行的時候,flag就會失去它的值,函數體無法執行正確的結果了。在開始接觸前端的時候,覺得閉包可有可無,事實是,這東西真的很重要!

var setVal = function(s, flag)    {      return function()      {        pos = Math.abs(parseInt(pic.style[point]));        if(flag > 0){   //當前點大于目標點坐標,畫面向右移動,left值減小          pic.style[point] =-Math.floor(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';        }        if(flag < 0) {          pic.style[point] =-Math.ceil(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';        }        if(pos == (sSingleSize * s))        {          now = s;          clearInterval(interval);        }      }    };

下面是代碼:

html

<!DOCTYPE html><html><head><meta charset="utf-8" /><title>picsGlide</title><link href="css/index.css" rel="stylesheet" type="text/css"><script type="text/javascript" src="js/jquery-1.3.2.js"></script><script src="js/index.js"></script></head><body onLoad="init()"><div id = "picBox">  <ul class = "show_pic" style = "left: 0">    <li class = "on"><a href="#"><img src="imgs/ccc.jpg" alt="" title="" /></a></li>    <li><img src="imgs/aaa.jpg" alt="" title="" /></li>    <li><img src="imgs/bbb.jpg" alt="" title="" /></li>    <li><img src="imgs/ccc.jpg" alt="" title="" /></li>    <li><img src="imgs/ccc.jpg" alt="" title="" /></li>  </ul>  <div class = "bg"></div>   <ul class = "show_des">    <li class="on">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 = "icon_num">    <li class = "on" >1</li>    <li>2</li>    <li>3</li>    <li>4</li>    <li>5</li>  </ul></div></body></html>

css

body {font-size: 12px; }ul, li {  padding: 0;  margin: 0;  list-style: none; }#picBox {  width: 610px;   height: 205px;   margin: 50px auto;   overflow: hidden;   position: relative;  font-size: 0;}/*輪播圖片*/#picBox .show_pic {  width: 3050px;  position: absolute;}#picBox .show_pic li {  float: left;   width: 610px;   height: 205px;  display: none;  /*display: none;*/}#picBox .show_pic li.on {   display: block;}#picBox .show_pic li img {   display: block;  width: 610px;  height: 205px;}#picBox .icon_num {  position: absolute;  bottom: 12px;   right: 10px;  z-index: 10;}#picBox .icon_num li {   float: left;   /*background: url(/uploadfile/200912/28/FA15567738.gif) no-repeat -15px 0;  */  width: 16px;   height: 16px;  font-size: 16px;   color: #39F;   text-align: center;   cursor: pointer;   margin-right: 5px;}#picBox .icon_num li.on {  background: #000;  opacity: 0.5; }/*背景*/.bg {  z-index: 1;  position: absolute;  bottom: 0;  height: 40px;  width: 610px;  background: #000;  opacity: 0.6;  filter: alpha(opacity = 60);}#picBox .show_des {  width: 300px;  height: 18px;  position: absolute;  bottom: 11px;  left: 15px;  color: #fff;  z-index: 10;}#picBox .show_des li {  display: none;  line-height: 18px;  font-size: 18px;}#picBox .show_des li.on {   display: block;}

js

function cleanWhitespace(oEelement)  {    for(var i=0;i<oEelement.childNodes.length;i++){      var node=oEelement.childNodes[i];      if(node.nodeType==3 && !//S/.test(node.nodeValue))      {        node.parentNode.removeChild(node);      }    }  }  //輪播代碼  this.layerGlide=function(auto,oBox,sSingleSize,second,fSpeed,point)  {    var interval,timeout;    //兩個定時器    var pos;           //當前定位坐標整形的絕對值    var time = second, now = 0;    //time圖片移動一次時間間隔, now當前圖片的index值    var speed = fSpeed      //移動速度    var delay = second * 1000;  //每次切換圖片的時間間隔    var picBox = document.getElementById(oBox);    cleanWhitespace(picBox);    var pic = picBox.childNodes[0]; //圖片列表    var des = picBox.childNodes[2].getElementsByTagName("li"); //圖片列表    var con = picBox.childNodes[3].getElementsByTagName("li");    var sum = con.length;    var setVal = function(s, flag)    {      return function()      {        pos = Math.abs(parseInt(pic.style[point]));        if(flag > 0){   //當前點大于目標點坐標,畫面向右移動,left值減小          pic.style[point] =-Math.floor(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';        }        if(flag < 0) {          pic.style[point] =-Math.ceil(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';        }        if(pos == (sSingleSize * s))        {          now = s;          clearInterval(interval);        }      }    };    var changeTo = function(num) {      for(var i=0; i<sum; i++)      {        con[i].className = "";        des[i].className = "";       };      con[num].className = "on";      des[num].className = "on";      var flag = Math.abs(parseInt(pic.style[point]))-sSingleSize * num ;      interval = setInterval(setVal(num, flag), time);      //bkg.hide().fadeIn();    }     function autoGlide()    {      clearTimeout(interval);      now = (now == (parseInt(sum)-1) )? 0: (now + 1);      changeTo(now);      timeout = setTimeout(autoGlide,delay);    }    function isAuto() {      if(auto) {        timeout = setTimeout(autoGlide,delay);      };    }    isAuto();  //開始自動輪播    for(var i=0; i<sum; i++)  //導航按鈕    {      con[i].onmouseover = (function(i)      {        return function()        {          clearTimeout(timeout);          clearInterval(interval);          changeTo(i);          this.onmouseout=isAuto();        }      })(i)    }  }  //淡入淡出  this.layerFader=function(auto, oBox, second, count, speed)  {    var interval,timeout;    //兩個定時器    var now = 0;    //time圖片移動一次時間間隔, now當前圖片的index值    var delay = second * 1000;  //每次切換圖片的時間間隔    var picBox = document.getElementById(oBox);    cleanWhitespace(picBox);    var pic = picBox.childNodes[0].getElementsByTagName("li");    var des = picBox.childNodes[2].getElementsByTagName("li");     var con = picBox.childNodes[3].getElementsByTagName("li");    var sum = con.length;    function fadeIn(elem){        setOpacity(elem,0); //初始全透明      for(var i = 0;i<=count;i++){ //透明度改變 20 * 5 = 100           (function(i){               var level = i * 5; //透明度每次變化值              setTimeout(function(){                  setOpacity(elem, level)               },i*speed);          })(i);         }     }      function setOpacity(elem, level) {  //設置透明度       if (elem.filters) {        elem.style.filter = "alpha(opacity=" + level + ")";      } else {        elem.style.opacity = level / 100;      }    }    var changeTo = function(num) {      for(var i=0; i<sum; i++)      {        con[i].className = "";        des[i].className = "";         pic[i].className = "";      };      fadeIn(pic[num]);      con[num].className = "on";      des[num].className = "on";      pic[num].className = "on";      //bkg.hide().fadeIn();    }     function autoGlide()    {      clearTimeout(interval);      now = (now == (parseInt(sum)-1) )? 0: (now + 1);      changeTo(now);      timeout = setTimeout(autoGlide,delay);    }    function isAuto() {      if(auto) {        timeout = setTimeout(autoGlide,delay);      };    }    isAuto();  //開始自動輪播    for(var i=0; i<sum; i++)  //導航按鈕    {      con[i].onmouseover = (function(i)      {        return function()        {          clearTimeout(timeout);          //clearInterval(interval);          changeTo(i);          this.onmouseout=isAuto();        }      })(i)    }  }

jquery相對于js就簡單了很多,這里就不贅述了。大三的時候上設計模式課,老師告訴我們針對接口而不是針對實現編程,代碼中盡量不要出現常量,提高代碼的復用性,所以寫代碼的時候,把可變的因素都提到了參數中。最后一句,對于js的DOM操作,js原生是王道,多用多練,才能掌握的好,希望以后越走越遠。

以上這篇原生JS實現圖片輪播與淡入效果的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
韩国国内大量揄拍精品视频| 成人夜晚看av| 日韩欧美中文字幕在线观看| 日本一欧美一欧美一亚洲视频| 亚洲综合精品一区二区| 欧美久久精品午夜青青大伊人| 亚洲欧美日韩国产成人| 亚洲第一区第一页| 国产成人av在线| 亚洲香蕉成人av网站在线观看| 成人av在线网址| 成人深夜直播免费观看| 国产综合在线视频| 欧美日韩中文字幕在线| 国产视频亚洲视频| 国产精品草莓在线免费观看| 色香阁99久久精品久久久| 色综合天天狠天天透天天伊人| 日韩电影免费观看中文字幕| 中文在线资源观看视频网站免费不卡| 日韩av手机在线看| 国产精品一二三视频| 欧美精品在线免费| 亚洲电影免费观看高清完整版| 久久亚洲精品毛片| 久久精品中文字幕电影| 亚洲精品日韩丝袜精品| 自拍偷拍亚洲区| 亚洲图片在区色| 91久久综合亚洲鲁鲁五月天| 亚洲欧美精品一区二区| 91精品国产乱码久久久久久久久| 精品国产自在精品国产浪潮| 日本成人激情视频| 国产精品久久久久7777婷婷| 国产主播喷水一区二区| 欧美日韩午夜激情| 国产精品自产拍高潮在线观看| 国产亚洲福利一区| 欧美做受高潮电影o| 中文字幕日韩欧美精品在线观看| 国产精品国产亚洲伊人久久| 亚洲a区在线视频| 久久久精品一区二区| 精品国产依人香蕉在线精品| 国产精品久久久久av免费| 国产精品va在线播放| 成人av.网址在线网站| 久久天天躁狠狠躁夜夜爽蜜月| 美女久久久久久久久久久| 日韩av片永久免费网站| 亚洲高清福利视频| 精品毛片网大全| 成人伊人精品色xxxx视频| 欧美午夜www高清视频| 国内精品视频久久| 亚洲乱码av中文一区二区| 欧美日韩成人在线视频| 国产日韩换脸av一区在线观看| 热99精品里视频精品| 欧美日韩在线看| 疯狂蹂躏欧美一区二区精品| 91人人爽人人爽人人精88v| 国产区亚洲区欧美区| 精品久久久久久久大神国产| 欧美高清理论片| 欧美激情第一页xxx| 成人在线视频网| 永久免费毛片在线播放不卡| 日韩精品在线观看一区二区| 91伊人影院在线播放| 一本一本久久a久久精品综合小说| 成人在线播放av| 91精品久久久久久久久久另类| 国产亚洲一区精品| 日韩av电影在线网| 成人免费网视频| 国产成人亚洲综合青青| 欧美亚洲另类激情另类| 亚洲国产一区二区三区四区| 成人激情电影一区二区| 4p变态网欧美系列| 日韩一区二区三区国产| 精品欧美激情精品一区| 国语自产精品视频在线看| 久久视频免费在线播放| 日韩精品免费看| 亚洲激情中文字幕| 色偷偷亚洲男人天堂| 国产乱人伦真实精品视频| 国产精品视频中文字幕91| 久久国产精品久久精品| 欧美成人精品在线播放| 国产日本欧美一区二区三区在线| 欧美专区国产专区| 欧美极品美女视频网站在线观看免费| 欧美极品第一页| 欧美一二三视频| 国产精品久久不能| 亚洲国产欧美自拍| 久久久国产精彩视频美女艺术照福利| 国产成人精品网站| 国产精品wwwwww| 久久人人爽人人爽人人片av高清| 国产精品白嫩初高中害羞小美女| 亚洲国产成人精品久久久国产成人一区| 欧美精品生活片| 色阁综合伊人av| 精品国产一区二区三区久久| 国产精品美女在线观看| 久久精品国产综合| 久久久精品中文字幕| 亚洲福利在线播放| 日韩精品在线视频美女| 亚洲最大在线视频| 日本精品va在线观看| 欧美色道久久88综合亚洲精品| 91久久国产综合久久91精品网站| 久久久视频在线| 久久人人爽人人爽人人片亚洲| 亚洲大胆美女视频| 精品成人久久av| 91免费视频国产| 欧美性受xxxx白人性爽| 日韩成人在线电影网| 亚洲乱码一区av黑人高潮| 国产精品丝袜久久久久久不卡| 日韩国产精品一区| 亚洲精品久久久久中文字幕二区| 奇米四色中文综合久久| 久久久久久网站| 亚洲精品久久久久久久久久久久| 精品福利在线视频| 欧美国产精品日韩| 日韩午夜在线视频| 国产精品成熟老女人| 蜜臀久久99精品久久久无需会员| 欧美激情欧美激情| 伊人青青综合网站| 国产一区二区激情| 久久精品久久久久电影| 热门国产精品亚洲第一区在线| 国产福利视频一区| 日韩有码在线电影| 精品国产91乱高清在线观看| 91精品国产综合久久香蕉| 91免费版网站入口| 日韩电影中文字幕在线| 中文字幕日韩欧美精品在线观看| 日韩av快播网址| 亚洲天堂网站在线观看视频| 亚洲高清久久久久久| 久久人人爽亚洲精品天堂| 91av福利视频| 人人做人人澡人人爽欧美| 国产精品入口夜色视频大尺度| 色狠狠av一区二区三区香蕉蜜桃| 国产精品夜色7777狼人| 欧美激情网站在线观看| 色与欲影视天天看综合网| 欧美猛交ⅹxxx乱大交视频| 亚洲男人的天堂网站| 亚洲国产精品成人va在线观看| 91国内揄拍国内精品对白|