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

首頁 > 編程 > JavaScript > 正文

原生JS實現輪播效果+學前端的感受(防止走火入魔)

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

插件!插件!天天聽到有人求這個插件,那個插件的,當然,用第三方插件可以大幅提高開發效率,但作為新手,我還是喜歡自己來實現,主要是我有時間!

今天我來給大家分享下用原生JS實現圖片輪播的寫法

前輩們可以無視下面這段廢話:

在開始之前,先說下我學前端到現在的一點感受。到今天應該有兩個月左右了吧,基本每天6-10小時的學習時間,純自學,據說培訓不靠譜!本人目前的階段是只會三大件(HTML5、CSS3、javascript),其它所有知識都還排在學習計劃后面....現在正處在迷茫期,不知道下面該先學什么了!不管了,先把三大件整溜一點再說吧,前輩們若有什么好的建議,希望指點!

從HTML5到CSS3,一路過來,感覺前端挺簡單的,就有點信心滿滿,動力十足,接著學JS,以前學過C#、蘋果的swift,都是面向對象的強類型的語言,比較先進,不過我還是喜歡前端,所以轉到這里來了,開始學JS也覺得挺容易的,就是感覺這門語言有點亂,跟別人不太一樣!而權威指南有些東西不容易弄明白,沒辦法,就多百度,多看別人對一些比如閉包、原型等概念的理解,慢慢的也就能掌握的7788了,到了這個階段,你也許已經慢慢的了解到,原來前端它包括很多東西!一堆的第三方類庫、框架等等,還有很多其它東西,總之,新名詞不斷的在你眼前冒出來,有的說這個要過時了,那個即將是主流,好亂!好亂!接下去我該怎么走?先學什么?后學什么?

我目前就處在這個階段,有時候會連續兩天什么都看不下去,也睡不著覺,心煩意亂,就是:走火入魔了!

我就想啊,我這是怎么了?想不明白??!算了,先休息下,鍛煉下身體吧!就去跑步,瞎逛!一邊思考:怎么讓自己重新進入狀態!

后來我是這么做的:給自己點糖吃!(自己先動手做一些比較簡單的實例)

我發現,這糖還真甜,我居然能做出來!成就感悠然而生,動力也就十足了!我就一個實例接著一個實例的寫,不懂、對API不熟悉就翻文檔(在看別人的代碼之前自己先寫,實在不會了再看),慢慢的,我感覺自己真的又回來了,開始步入正軌了!

我還特地看了下,目前大部分招前端的公司都需要什么樣的人,然后重新給自己制定了學習計劃,當然,因為眼下我有時間,所以我想拿一段時間出來先鞏固下3大基礎,多練習,然后回頭再過一遍文檔,多了解它們的基本的、內在的原理!下一步不管學什么,就容易上手的多了!同時,繼續多了解前端!多了解這個職業的前景和走向,就是給自己建立一個前端的世界觀,這樣,學起來才不會迷失方向!

至于該學哪些第三方類庫、框架,我目前也不知道,JQ過時了嗎?需不需學?我也不知道,也先不管了,就先玩玩原生吧!以后應該自然就知道了吧!

實戰開始,下面是代碼和演示,

前輩的面向對象寫法,目前本人還學不來,我只會寫一些函數,呵呵?。▓D片來自網絡,也可自己切個300*200圖片來查看效果,點擊‘漸進漸出'按鈕開始)

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title></title>  <style>    *{      margin: 0;      padding: 0;      list-style: none;      text-decoration: none;    }    #slide{      position: absolute;      top: 100px;      left: 50px;      width: 300px;      height: 200px;      border: 1px solid gray;    }    #slide .blog-name{      display: block;      position: absolute;      bottom: 0;      left: 0;      width: 100%;      height: 25px;      line-height: 25px;      background-color: rgba(155,155,155,0.5);      z-index: 4;      cursor: pointer;      text-indent: 3px;    }    #slide-nav{      position: absolute;      right: 5px;      bottom: 5px;      z-index: 5;    }    #slide-nav li{      display: inline-block;      width: 16px;      text-align: center;      line-height: 16px;      border-radius: 5px;      cursor: pointer;      overflow:hidden;    }    #slide-nav li:hover,.selected{      background-color: #336699;      color: white;    }    .slide-content1{      position: absolute;      width: 300px;      height: 200px;      font-size: 0;    }    .slide-content1 a{      position: absolute;      cursor: pointer;    }    .slide-content1 a:visited{color: black;}    #model-btn{      position: absolute;      top: -25px;      font-size: 20px;    }  </style>  <script>    window.onload = function(){      var sufuImageScrooller = function(){        //幾個工具函數        function show(img){          var id;          for ( var i = 0; i <= 21; i++) {            var op = i * 5;            id = setTimeout(function(e) {              setOpacity(img, e)            }.bind(this,op), i * 50);          }          clearTimeout(id);        }        function hide(img){          var id;          for ( var i = 0; i <= 21; i++) {            var op = 100 - i * 5;            id = setTimeout(function(e) {              setOpacity(img, e)            }.bind(this,op), i * 20);          }          clearTimeout(id);        }        function getById(id){          return document.getElementById(id);        }        function setOpacity(elem,level){          if(elem.filter){            elem.style.filter = "alpha(opacity=" + level + ")"; //兼容IE          }else{            elem.style.opacity = level/100;          }        }        //(漸進漸出模式)主體函數        function inOutModel(nums,navId,imgContainerId,imgInfoId,delay){          //防止多次點擊模式選擇按鈕創建更多的li          if(getById('slide-nav').childElementCount !== 0){return}          //創建導航按鈕          var nav = [];          var targetIdext = 0; //保存圖片狀態信息          var cureentIdext = 0; //保存圖片狀態信息          var frag = document.createDocumentFragment();          for(var i=0;i<nums;i++){            nav[i] = frag.appendChild(document.createElement('li')); //appendChild方法會返回該li            nav[i].innerHTML = i+1;          }          getById(navId).appendChild(frag);          //初始化為顯示第一張圖片          var imgs = getById(imgContainerId).getElementsByTagName('a');          var info = getById(imgInfoId);          info.innerHTML = imgs[0].title.slice(0,12)+'...';          nav[0].className = 'selected'; //動態改變li的className來改變它的樣式          for(var j=1;j<nav.length;j++){            setOpacity(imgs[j],0);          }          //開始自動輪播          var id;          function start(delay){            id = setInterval(function(){              hide(imgs[cureentIdext]);              nav[cureentIdext].className = '';              if(targetIdext<nums-1){                targetIdext ++;              }else{                targetIdext = 0;              }              cureentIdext = targetIdext;              show(imgs[targetIdext]);              nav[targetIdext].className = 'selected';              info.innerHTML = imgs[targetIdext].title.slice(0,12)+'...';            },delay);          }          start(delay);          //為每個導航按鈕添加事件          for(var k=0;k<nav.length;k++){            nav[k].onclick = function(event){              var e = event||window.event; //兼容IE              var t = event.target||event.srcElement; //兼容IE              var idex = parseInt(t.innerHTML)-1;              console.log('idex:'+idex+' t:'+targetIdext+' c:'+cureentIdext);              if(idex === cureentIdext){return;}              hide(imgs[cureentIdext]);              nav[cureentIdext].className = '';              cureentIdext = idex;              show(imgs[idex]);              nav[idex].className = 'selected';              info.innerHTML = imgs[idex].title.slice(0,12)+'...';            }          }          getById(navId).onmouseover = function(){clearInterval(id)};          getById(navId).onmouseout = function(){start(delay)};        }        //從右向左模式函數        function fromRightModel(nums,navId,imgContainerId,imgInfoId,delay){          alert('博主偷懶,忘記實現這個函數了!需要請留言!');        }        function fromTopModel(nums,navId,imgContainerId,imgInfoId,delay){          alert('博主偷懶,忘記實現這個函數了!需要請留言!');        }        return {          inOutModel: inOutModel,          fromRightModel: fromRightModel,          fromTopModel: fromTopModel,          getById: getById        }      }();      sufuImageScrooller.getById('model-btn1').onclick = function(){          sufuImageScrooller.inOutModel(5,'slide-nav','slide-main','slide-info',3500);      };      sufuImageScrooller.getById('model-btn2').onclick = function(){        sufuImageScrooller.fromRightModel(5,'slide-nav','slide-main','slide-info',3500);      };      sufuImageScrooller.getById('model-btn3').onclick = function(){        sufuImageScrooller.fromTopModel(5,'slide-nav','slide-main','slide-info',3500);      };    };  </script></head><body><div id="slide">  <a id="slide-info" class="blog-name"  target="_blank">蘇福的博客</a>  <ul id="slide-nav">  </ul>  <div id="slide-main" class="slide-content1 slide-content2">    <a class="a-img" title="用原生JS讀寫CSS樣式的方法總結"  target="_blank">      <div>        <img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1247027539,1217965501&fm=21&gp=0.jpg">      </div>    </a>    <a class="a-img" title="DOM中的事件處理概覽與原理"  target="_blank">      <div>        <img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4286855119,2694540617&fm=21&gp=0.jpg">      </div>    </a>    <a class="a-img" title="選取文檔元素的方法總結"  target="_blank">      <div>        <img src="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=4042865154,1782505495&fm=21&gp=0.jpg">      </div>    </a>    <a class="a-img" title="窗口、窗體之間的關系"  target="_blank">      <div>        <img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2603911195,1920098549&fm=21&gp=0.jpg">      </div>    </a>    <a class="a-img" title="你真的知道setTimeout是如何運行的嗎?"  target="_blank">      <div>        <img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=4104312586,1589909074&fm=21&gp=0.jpg">      </div>    </a>  </div>    <div id="model-btn">    <input type="button" id="model-btn1" value="漸進漸出">    <input type="button" id="model-btn2" value="從右向左">    <input type="button" id="model-btn3" value="從上至下">  </div></div></body></html>

一開始,先想,該怎么實現:不就利用定時器改變圖片,過場改變圖片的opacity嗎?

一、html排版比較簡單:

<ul id="slide-nav"> </ul><div id="slide-main" class="slide-content1">    <a class="a-img" title="" href="" target="_blank">      <div>        <img src="lg1.png">      </div>    </a>    ...</div>...

slide-info用來顯示圖片標題,slide-nav是數字按鈕,slide-main就是圖片容器了,里面放圖片鏈接,

標簽里面沒寫li,因為它是通過JS動態創建的;

二、CSS樣式的設置,只要你親自去體驗,就都能明白了,注意點:

•自己布局前,先最好把父元素加border,這樣一幕了然,最后再去掉

•ul li 等很多標簽默認是有padding的,所有要把它設為0;

*{ margin: 0; padding: 0; list-style: none; text-decoration: none; }
height: 25px;和line-height: 25px;兩個相等,可以讓字居中

z-index 只相對于你的兄弟和子輩,對于旁系的親戚無效,如果想讓它顯示在旁系的親戚前面,就設置旁系的親戚的祖先,比如你的爺爺是宰相,你的二爺是農民,那么你們家所有人身份都比你二爺家的所有人的身份都尊貴

•position: absolute;也是和他的父輩有關系的,父輩沒設置定位,靠不住啊,那就繼續往上找依靠,直到找到為止,然后依靠他來定位!

•如果你要實現從右向左的效果,記住font-size:0;清楚圖片之間的間距,讓圖片肩并肩!

俗話說,熟能生巧,只有CSS基礎扎實,才能把控好布局!比如下面這個雙飛翼布局,不需要定位就能實現:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title></title>  <style>    body{      margin: 0;      padding: 0;    }    .header,.footer{      width: 100%;      height: 50px;      line-height: 50px;      text-align: center;      background-color: greenyellow;    }    .container{      overflow: hidden;      *zoom: 1;    }    .left{      float: left;      width: 100px;      height: 100px;      margin-left: -100%;      background-color: green;    }    .main{      float: left;      width: 100%;      height: 100px;      background-color: gray;    }    .right{      float: left;      width: 200px;      height: 100px;      margin-left: -200px;      background-color: gold;    }    .center{      padding-left: 100px;      padding-right: 200px;    }  </style></head><body><div class="header">header</div><div class="container">  <div class="main">    <div class="center">main-center</div>  </div>  <div class="left">left</div>  <div class="right">right</div></div><div class="footer">footer</div></body></html>

三、代碼的實現

先寫大綱:

var sufuImageScrooller = function(){function getById(id){...} //通用獲取元素對象function setOpacity(elem,level){...} //設置透明度function hide(img){...} //淡入function show(omg){...} //淡出function inOutModel(nums,navId,imgContainerId,imgInfoId,delay){ ... } //主函數體return {inOutModel: inOutModel,...}}();

這樣的寫法就可以通過sufuImageScrooller來調用inOutModel方法了,sufuImageScrooller. inOutModel(5,'slide-nav','slide-main','slide-info',3500);
inOutModel(nums,navId,imgContainerId,imgInfoId,delay)參數:nums創建li數量,必須和圖片數量對應,navId數字按鈕容器id,imgContainerId圖片容器id,imgInfoId顯示圖片title信息id,delay指定切換圖片延遲時間;

大綱寫出來了,就完成了一大半了,其它就是具體細節代碼的實現了,我寫的不是很好,只能說實現了這個功能,大家自己琢磨,如果有好的建議歡迎提出;
從inOutModel函數開始切入,然后步步深入,關鍵在于動手打出來,光看的話體會沒那么深刻!

好了,就介紹到這一步了,不會的自己多翻文檔API,也可留言問我

以上這篇原生JS實現輪播效果+學前端的感受(防止走火入魔)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩av在线播放| 亚洲福利视频二区| 少妇激情综合网| 久久视频精品在线| 色999日韩欧美国产| 亚洲一区二区三区乱码aⅴ| 色综合男人天堂| 久久久免费高清电视剧观看| 国产日本欧美一区二区三区在线| 中文字幕日本精品| 欧美性猛交xxx| 在线播放日韩av| 日韩av免费看网站| 91高清视频在线免费观看| 国产精品久久久久久久午夜| 一个人看的www欧美| 久久综合伊人77777尤物| 日韩欧美国产免费播放| 富二代精品短视频| 亚洲黄页视频免费观看| 日韩最新在线视频| 全亚洲最色的网站在线观看| 日韩免费在线播放| 国产精品扒开腿爽爽爽视频| 久久久久一本一区二区青青蜜月| 欧美黄色www| 操人视频在线观看欧美| 国产精品一区二区久久久| 亚洲成人激情视频| 亚洲性夜色噜噜噜7777| 欧美日韩性生活视频| 欧美日韩中文字幕在线视频| 久久精品亚洲国产| 亚洲中国色老太| 亚洲成人在线视频播放| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品永久免费视频| 亚洲sss综合天堂久久| 国产精品pans私拍| 亚洲香蕉av在线一区二区三区| 懂色av中文一区二区三区天美| 日韩中文在线不卡| 国产精品91在线| 亚洲精品美女免费| 久久国产精品影片| 久久久成人的性感天堂| 91干在线观看| 日日骚久久av| 成人免费观看49www在线观看| 最近2019好看的中文字幕免费| 精品久久久一区| 日韩高清免费在线| 久久久视频精品| 欧美又大又硬又粗bbbbb| 亚洲伦理中文字幕| 国产精品一区=区| 亚洲精品99久久久久| 国产亚洲欧美一区| 日韩不卡中文字幕| 精品亚洲一区二区三区四区五区| 色诱女教师一区二区三区| 美日韩精品免费观看视频| 国产精品老女人精品视频| 久久国产精品首页| 97视频免费观看| 91香蕉嫩草神马影院在线观看| 久久久极品av| 欧美亚洲国产另类| 尤物yw午夜国产精品视频明星| 不卡av电影在线观看| 欧美一级电影免费在线观看| 精品亚洲va在线va天堂资源站| 综合欧美国产视频二区| 久久人人爽亚洲精品天堂| 日韩av电影在线播放| 欧美性猛交丰臀xxxxx网站| 久久人人爽亚洲精品天堂| 日韩精品久久久久| 久久久久久欧美| 欧美一级淫片丝袜脚交| 国产成人福利夜色影视| 亚洲欧美变态国产另类| 富二代精品短视频| 亚洲乱码一区av黑人高潮| 国产成人+综合亚洲+天堂| 91精品啪在线观看麻豆免费| 国产精品第二页| 久久久亚洲天堂| 日韩av免费在线播放| 国产精品偷伦视频免费观看国产| 欧美丰满老妇厨房牲生活| 欧美一级黄色网| 国产精品免费一区| 俺去了亚洲欧美日韩| 国产脚交av在线一区二区| 日本精品一区二区三区在线| 欧美乱妇高清无乱码| 日韩在线视频网| 国产91精品久久久久久| 国产精品成人av性教育| 中日韩美女免费视频网址在线观看| 国产999精品久久久影片官网| 欧美最猛性xxxxx亚洲精品| 成人啪啪免费看| 欧美性xxxx极品hd满灌| 日本精品视频在线观看| 国产日韩在线亚洲字幕中文| 8x拔播拔播x8国产精品| 91av在线播放视频| 国产精品美乳在线观看| 国产精品伦子伦免费视频| 国产精品日韩电影| 7777kkkk成人观看| 国产一区二区精品丝袜| 久久久噜噜噜久久| 日韩视频免费观看| 亚洲女性裸体视频| 亚洲视频在线观看视频| 国产精品自产拍在线观看中文| 亚洲偷欧美偷国内偷| 琪琪亚洲精品午夜在线| 国产亚洲精品综合一区91| 97精品视频在线播放| 国产精品pans私拍| 福利一区视频在线观看| 国产精品美女免费看| 日韩在线观看免费高清完整版| 国产亚洲欧洲高清| 日韩女优人人人人射在线视频| 亚洲最大的av网站| 国产日韩欧美电影在线观看| 亚洲福利视频网站| 美女啪啪无遮挡免费久久网站| 日韩av影院在线观看| 97精品在线观看| 美女啪啪无遮挡免费久久网站| 亚洲缚视频在线观看| 亚洲福利精品在线| 97色在线观看| 亚洲人成电影在线播放| 欧美特级www| 久久欧美在线电影| 亚洲欧美激情视频| 色婷婷综合成人av| 国内精品久久久久| 亚洲国产成人精品久久久国产成人一区| 亚洲精品第一国产综合精品| 久久久久久久网站| 91免费看片网站| 亚洲成av人片在线观看香蕉| 97av在线视频免费播放| 成人欧美一区二区三区黑人孕妇| 一本色道久久综合亚洲精品小说| 亚洲精品视频播放| 亚洲美女视频网站| 欧美尤物巨大精品爽| 国产福利精品在线| 亚洲人成亚洲人成在线观看| 日韩大陆欧美高清视频区| 精品国产欧美一区二区三区成人| 久久精品视频导航| 黑丝美女久久久| 亚洲男人的天堂在线播放| 色偷偷av一区二区三区乱|