整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          JavaScript實現(xiàn)HTML輪播,簡單有效

          說一下需要的知識 setinterval函數(shù),明白document. getelementsById是什么意思。

          輪播呈現(xiàn)方式多種多樣,鄙人在這里給出一個比較low的方法,若有大神指教,不甚感激!

          思路:

          1、在body里面設(shè)置一個img標簽,src路徑暫且不設(shè)置,并給img標簽設(shè)置id。

          2、寫一個function函數(shù),里面設(shè)置src隨著某種變量而改變的條件。

          下面擼代碼!!!


          1. <!DOCTYPE html>
          2. <html>
          3. <head>
          4. <meta charset="utf-8" />
          5. <title></title>
          6. </head>
          7. <body>
          8. <img id = "image"/>
          9. <script >
          10. function $(id){
          11. return document.getElementById(id);
          12. }
          13. var index=1;
          14. function setSrc(){
          15. $("image").src="./img/"+index+".png";
          16. ++index;
          17. if(index==3){
          18. index=1;
          19. }
          20. }
          21. setSrc();
          22. setInterval("setSrc()",500);
          23. </script>
          24. </body>
          25. </html>

          在這里我采用了投機取巧的方式,我的圖片名都是:

          讀者可以按照需要改變一下函數(shù)的結(jié)構(gòu)

          使用ProgressBar.js,可以輕松地為Web創(chuàng)建響應(yīng)式和時尚的進度欄。即使在移動設(shè)備上動畫效果也表現(xiàn)良好。它提供了一些內(nèi)置形狀,如“直線”,“圓”和“半圓”,但是你也可以使用任何矢量圖形編輯器創(chuàng)建自定義形狀的進度條。ProgressBar.js是輕量級的,MIT開源許可,并支持包括IE9 +在內(nèi)的所有主要瀏覽器。



          Github


          https://github.com/kimmobrunfeldt/progressbar.js

          用法

          以下是最簡單的一個實例,從0大100%的進度條顯示

          <div></div>
          var ProgressBar = require('progressbar.js');
          
          
          // HTML
          var bar = new ProgressBar.Line('#container', {easing: 'easeInOut'});
          bar.animate(1); // Value from 0.0 to 1.0

          以下是線、圓、半圓以及自定義形狀的效果圖,可以直接到文檔查看動態(tài)的效果




          安裝

          bower install progressbar.js
          
          //or
          
          npm install progressbar.js
          • CommonJS
          var ProgressBar = require('progressbar.js')
          var line = new ProgressBar.Line('#container');
          
          1. AMD
          require.config({
           paths: {'progressbar': '../bower_components/progressbar.js/dist/progressbar'}
          });
          
          define(['progressbar'], function(ProgressBar) {
           var line = new ProgressBar.Line('#container');
          });
          
          • Global variable
          // If you aren't using any module loader, progressbar.js exposes
          // global variable: window.ProgressBar
          var line = new ProgressBar.Line('#container');
          var circle = new ProgressBar.Circle('#example-percent-container', {
           color: '#FCB03C',
           strokeWidth: 3,
           trailWidth: 1,
           text: {
           value: '0'
           }
          });

          React組件

          https://github.com/kimmobrunfeldt/react-progressbar.js

          總結(jié)

          在常見的Web開發(fā)中經(jīng)常看到有些地方需要進度條顯示或者類似的需求,如果你的項目并不是很龐大,但有些時候又不需要一些第三方框架的時候就可以使用這些獨立的庫來完成你想要的功能!

          先必須要說的是,this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰實際上this的最終指向的是那個調(diào)用它的對象(這句話有些問題,后面會解釋為什么會有問題,雖然網(wǎng)上大部分的文章都是這樣說的,雖然在很多情況下那樣去理解不會出什么問題,但是實際上那樣理解是不準確的,所以在你理解this的時候會有種琢磨不透的感覺,那么接下來我會深入的探討這個問題。

            為什么要學(xué)習(xí)this?如果你學(xué)過面向?qū)ο缶幊蹋悄憧隙ㄖ栏墒裁从玫模绻銢]有學(xué)過,那么暫時可以不用看這篇文章,當然如果你有興趣也可以看看,畢竟這是js中必須要掌握的東西。

          例子1:

          function a(){
              var user = "追夢子";
              console.log(this.user); //undefined
              console.log(this); //Window
          }
          a();

          按照我們上面說的this最終指向的是調(diào)用它的對象,這里的函數(shù)a實際是被Window對象所點出來的,下面的代碼就可以證明。

          function a(){
              var user = "追夢子";
              console.log(this.user); //undefined
              console.log(this);  //Window
          }
          window.a();

          和上面代碼一樣吧,其實alert也是window的一個屬性,也是window點出來的。

          例子2:

          var o = {
              user:"追夢子",
              fn:function(){
                  console.log(this.user);  //追夢子
              }
          }
          o.fn();

            這里的this指向的是對象o,因為你調(diào)用這個fn是通過o.fn()執(zhí)行的,那自然指向就是對象o,這里再次強調(diào)一點,this的指向在函數(shù)創(chuàng)建的時候是決定不了的,在調(diào)用的時候才能決定,誰調(diào)用的就指向誰,一定要搞清楚這個。

          其實例子1和例子2說的并不夠準確,下面這個例子就可以推翻上面的理論。

          如果要徹底的搞懂this必須看接下來的幾個例子

          本文出處:追夢子博客

          例子3:

          var o = {
              user:"追夢子",
              fn:function(){
                  console.log(this.user); //追夢子
              }
          }
          window.o.fn();

            這段代碼和上面的那段代碼幾乎是一樣的,但是這里的this為什么不是指向window,如果按照上面的理論,最終this指向的是調(diào)用它的對象,這里先說個而外話,window是js中的全局對象,我們創(chuàng)建的變量實際上是給window添加屬性,所以這里可以用window點o對象。

            這里先不解釋為什么上面的那段代碼this為什么沒有指向window,我們再來看一段代碼。

          var o = {
              a:10,
              b:{
                  a:12,
                  fn:function(){
                      console.log(this.a); //12
                  }
              }
          }
          o.b.fn();

            這里同樣也是對象o點出來的,但是同樣this并沒有執(zhí)行它,那你肯定會說我一開始說的那些不就都是錯誤的嗎?其實也不是,只是一開始說的不準確,接下來我將補充一句話,我相信你就可以徹底的理解this的指向的問題。

            情況1:如果一個函數(shù)中有this,但是它沒有被上一級的對象所調(diào)用,那么this指向的就是window,這里需要說明的是在js的嚴格版中this指向的不是window,但是我們這里不探討嚴格版的問題,你想了解可以自行上網(wǎng)查找。

            情況2:如果一個函數(shù)中有this,這個函數(shù)有被上一級的對象所調(diào)用,那么this指向的就是上一級的對象。

            情況3:如果一個函數(shù)中有this,這個函數(shù)中包含多個對象,盡管這個函數(shù)是被最外層的對象所調(diào)用,this指向的也只是它上一級的對象,例子3可以證明,如果不相信,那么接下來我們繼續(xù)看幾個例子。

          var o = {
              a:10,
              b:{
                  // a:12,
                  fn:function(){
                      console.log(this.a); //undefined
                  }
              }
          }
          o.b.fn();

          盡管對象b中沒有屬性a,這個this指向的也是對象b,因為this只會指向它的上一級對象,不管這個對象中有沒有this要的東西。

          還有一種比較特殊的情況,例子4:

          var o = {
              a:10,
              b:{
                  a:12,
                  fn:function(){
                      console.log(this.a); //undefined
                      console.log(this); //window
                  }
              }
          }
          var j = o.b.fn;
          j();

          這里this指向的是window,是不是有些蒙了?其實是因為你沒有理解一句話,這句話同樣至關(guān)重要。

            this永遠指向的是最后調(diào)用它的對象,也就是看它執(zhí)行的時候是誰調(diào)用的,例子4中雖然函數(shù)fn是被對象b所引用,但是在將fn賦值給變量j的時候并沒有執(zhí)行所以最終指向的是window,這和例子3是不一樣的,例子3是直接執(zhí)行了fn。

            this講來講去其實就是那么一回事,只不過在不同的情況下指向的會有些不同,上面的總結(jié)每個地方都有些小錯誤,也不能說是錯誤,而是在不同環(huán)境下情況就會有不同,所以我也沒有辦法一次解釋清楚,只能你慢慢地的去體會。

          構(gòu)造函數(shù)版this:

          function Fn(){
              this.user = "追夢子";
          }
          var a = new Fn();
          console.log(a.user); //追夢子

            這里之所以對象a可以點出函數(shù)Fn里面的user是因為new關(guān)鍵字可以改變this的指向,將這個this指向?qū)ο骯,為什么我說a是對象,因為用了new關(guān)鍵字就是創(chuàng)建一個對象實例,理解這句話可以想想我們的例子3,我們這里用變量a創(chuàng)建了一個Fn的實例(相當于復(fù)制了一份Fn到對象a里面),此時僅僅只是創(chuàng)建,并沒有執(zhí)行,而調(diào)用這個函數(shù)Fn的是對象a,那么this指向的自然是對象a,那么為什么對象a中會有user,因為你已經(jīng)復(fù)制了一份Fn函數(shù)到對象a中,用了new關(guān)鍵字就等同于復(fù)制了一份。

            除了上面的這些以外,我們還可以自行改變this的指向,關(guān)于自行改變this的指向請看JavaScript中call,apply,bind方法的總結(jié)這篇文章,詳細的說明了我們?nèi)绾问謩痈膖his的指向。

          更新一個小問題當this碰到return時

          function fn()  
          {  
              this.user = '追夢子';  
              return {};  
          }
          var a = new fn;  
          console.log(a.user); //undefined

          再看一個

          function fn()  
          {  
              this.user = '追夢子';  
              return function(){};
          }
          var a = new fn;  
          console.log(a.user); //undefined

          再來

          function fn()  
          {  
              this.user = '追夢子';  
              return 1;
          }
          var a = new fn;  
          console.log(a.user); //追夢子
          function fn()  
          {  
              this.user = '追夢子';  
              return undefined;
          }
          var a = new fn;  
          console.log(a.user); //追夢子

          什么意思呢?

            如果返回值是一個對象,那么this指向的就是那個返回的對象,如果返回值不是一個對象那么this還是指向函數(shù)的實例。

          function fn()  
          {  
              this.user = '追夢子';  
              return undefined;
          }
          var a = new fn;  
          console.log(a); //fn {user: "追夢子"}

            還有一點就是雖然null也是對象,但是在這里this還是指向那個函數(shù)的實例,因為null比較特殊。

          function fn()  
          {  
              this.user = '追夢子';  
              return null;
          }
          var a = new fn;  
          console.log(a.user); //追夢子

          知識點補充:

            1.在嚴格版中的默認的this不再是window,而是undefined。

            2.new操作符會改變函數(shù)this的指向問題,雖然我們上面講解過了,但是并沒有深入的討論這個問題,網(wǎng)上也很少說,所以在這里有必要說一下。


          function fn(){
              this.num = 1;
          }
          var a = new fn();
          console.log(a.num); //1

            為什么this會指向a?首先new關(guān)鍵字會創(chuàng)建一個空的對象,然后會自動調(diào)用一個函數(shù)apply方法,將this指向這個空對象,這樣的話函數(shù)內(nèi)部的this就會被這個空的對象替代。

          2017-09-15 11:49:14

            注意: 當你new一個空對象的時候,js內(nèi)部的實現(xiàn)并不一定是用的apply方法來改變this指向的,這里我只是打個比方而已.

            if (this === 動態(tài)的\可改變的) return true;



          原文:https://www.cnblogs.com/pssp/p/5216085.html

          作者:追夢子


          主站蜘蛛池模板: 国产日韩AV免费无码一区二区| 亚洲色无码一区二区三区 | 久久免费国产精品一区二区| 手机看片福利一区二区三区 | 中文字幕一区二区人妻| 日本伊人精品一区二区三区 | 国产色综合一区二区三区| 老熟妇仑乱一区二区视頻| 国产人妖视频一区在线观看| 亚洲性日韩精品一区二区三区 | 亚洲AV午夜福利精品一区二区| 激情亚洲一区国产精品| 亚洲性日韩精品一区二区三区 | 日本一区二区三区在线视频| 日本一区二区在线| 日韩视频在线一区| 久久综合亚洲色一区二区三区| 无码欧精品亚洲日韩一区夜夜嗨| 老熟妇仑乱一区二区视頻| 国产vr一区二区在线观看| 日本无码一区二区三区白峰美| 好爽毛片一区二区三区四| 韩国福利视频一区二区| 99精品国产一区二区三区不卡| 一区二区日韩国产精品| 亚洲色精品VR一区区三区| 国产无线乱码一区二三区| 国产aⅴ一区二区| 精品欧美一区二区在线观看| 久久久老熟女一区二区三区| 国模吧无码一区二区三区| 精品无码一区二区三区水蜜桃| 国产精品制服丝袜一区| 人妻aⅴ无码一区二区三区| 夜夜嗨AV一区二区三区| 中文字幕一区二区三区四区| 成人免费视频一区二区| 国产伦精品一区二区三区四区| 亚洲AV成人精品一区二区三区 | 国产AV一区二区三区传媒| 日产一区日产2区|