最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

寫一個(gè)Vue loading 插件

 更新時(shí)間:2020年11月09日 14:46:16   作者:nobody-junior  
這篇文章主要介紹了如何寫一個(gè)Vue loading 插件,幫助大家更好的理解和學(xué)習(xí)vue 插件的相關(guān)知識(shí),感興趣的朋友可以了解下

作者:imgss

出處:http://www.cnblogs.com/imgss

什么是vue插件?

  • 從功能上說(shuō),插件是為Vue添加全局功能的一種機(jī)制,比如給Vue添加一個(gè)全局組件,全局指令等;
  • 從代碼結(jié)構(gòu)上說(shuō),插件就是一個(gè)必須擁有install方法的對(duì)象,這個(gè)方法的接收的第一個(gè)參數(shù)是Vue構(gòu)造函數(shù),還可以接收一個(gè)可選的參數(shù),用于配置插件:
var myplugin = {
  install:function(Vue, options){
 ...
  }
}

從意義上來(lái)說(shuō),正如jQuery的$.fn使jQuery有了一個(gè)龐大的生態(tài)一樣,Vue的插件機(jī)制使Vue形成了一個(gè)生態(tài)系統(tǒng),你可以開發(fā)一個(gè)插件給別人復(fù)用。

使用插件

使用一個(gè)插件,只要像下面這樣:

 Vue.use(myPlugin)

寫一個(gè)loading插件

光說(shuō)不練假把式,接下來(lái)寫一個(gè)loading插件練練手,這個(gè)插件被封裝成一個(gè)全局組件,實(shí)現(xiàn)下面的效果:

1 定義接口

我們希望應(yīng)用這個(gè)插件的方式如下:

<loading text='imgss' duration='3'></loading>

其中,text用于定義loading動(dòng)畫顯示的文字,duration定義動(dòng)畫時(shí)間

2 實(shí)現(xiàn)靜態(tài)組件

新建一個(gè)loading.js文件:

 let myPlugin = {
 install: function (Vue, options) {
  Vue.component('loading', {
   props: {
    text:{
     type:String
    },
    duration:{
     type:String,
     default:'1s'//默認(rèn)1s
    }
   },
   data: function() {
    return {};
   },
   template: `
    <div class='wrapper'>
     <div class='loading'>
      <span style='width:20px' v-for='char in text'>{{char}}</span>
     </div>
    </div>
   `
  });

這里模板的作用在于,將輸入的字符串轉(zhuǎn)換成組成字符串的字符構(gòu)成的span元素;
接下來(lái),新建一個(gè)html文件:

 <html>
 <head>
  <meta charset='utf-8'>
  <title>插件</title>
 </head>
 <body>
  <div id="app">
   <loading text='imgss'></loading>
   <loading text='我是一個(gè)粉刷匠' duration='2s'></loading>
  </div>
  <script src="http://cdn.bootcss.com/vue/2.4.2/vue.js"></script>
  <script src="./loading.js"></script>
  <script>
   Vue.use(myPlugin);
   var app = new Vue({
    el: '#app',
    data: {
    }
   });
  </script>

 </body>
</html>

這時(shí)基本上可以看到一個(gè)靜態(tài)效果。

3 加動(dòng)畫

給每個(gè)元素加上一個(gè)控制上下的animation

 @keyframes move {
  0% {
   margin-top: -10px;
   border-bottom: 1px solid;
  }
  50% {
   margin-top: 10px;
   border-bottom: none;
  }
  100% {
   margin-top: -10px;
  }
 }

除此之外,還有一下其他的公有樣式代碼,利用mounted生命周期函數(shù),動(dòng)態(tài)生成一個(gè)style標(biāo)簽,將css代碼插到文檔中:

   mounted: function () {
    var cssFlag = false;
    return function () {
     if (cssFlag) {
      return;
     }
     var head = document.querySelector('head');
     var style = document.createElement('style');
     style.type = 'text/css';
     style.innerText = `
     .wrapper{
      display: flex;
      justify-content: center;
     }
     .loading {
      display: flex;
      text-align: center;
      padding-top: 30px;
      height: 50px;
      justify-content: space-between;
     }
     .loading span {
      margin-top: 0;
      animation: ease infinite move;
      display: block;
     }

     @keyframes move {
      0% {
       margin-top: -10px;
       border-bottom: 1px solid;
      }
      50% {
       margin-top: 10px;
       border-bottom: none;
      }
      100% {
       margin-top: -10px;
      }
     }`;
     head.appendChild(style);
     cssFlag = true;
    };
   }(),

然后通過(guò)控制span的animation-delay來(lái)模擬曲線:

<span 
  :style='{
   width: "20px", 
   animationDuration: duration.indexOf("s") === -1 ? duration + "s" : duration , 
   animationDelay: parseInt(duration)/text.length*index +"s"
  }' 
  v-for='char,index in text'>
  {{char}}
 </span>

到這里,插件基本完成,看一下效果:

demo

代碼

codepen

以上就是寫一個(gè)Vue loading 插件的詳細(xì)內(nèi)容,更多關(guān)于Vue 插件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue中的驗(yàn)證登錄狀態(tài)的實(shí)現(xiàn)方法

    Vue中的驗(yàn)證登錄狀態(tài)的實(shí)現(xiàn)方法

    這篇文章主要介紹了Vue中的驗(yàn)證登錄狀態(tài)的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • vue通過(guò)element樹形控件實(shí)現(xiàn)樹形表格

    vue通過(guò)element樹形控件實(shí)現(xiàn)樹形表格

    這篇文章主要為大家介紹了vue?element樹形控件實(shí)現(xiàn)樹形表格,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • vue中注冊(cè)組件的兩種方式詳解(全局注冊(cè)&& 局部注冊(cè))

    vue中注冊(cè)組件的兩種方式詳解(全局注冊(cè)&& 局部注冊(cè))

    vue 是一個(gè)完全支持組件化開發(fā)的框架, 組件之間可以進(jìn)行相互的引用,這篇文章主要介紹了vue中注冊(cè)組件的兩種方式詳解(全局注冊(cè)&& 局部注冊(cè)),需要的朋友可以參考下
    2023-06-06
  • vue3使用mqtt的示例代碼

    vue3使用mqtt的示例代碼

    這篇文章主要介紹了vue3使用mqtt的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • vue3+vite使用element-plus問(wèn)題

    vue3+vite使用element-plus問(wèn)題

    這篇文章主要介紹了vue3+vite使用element-plus問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue子組件如何獲取父組件的內(nèi)容(props屬性)

    vue子組件如何獲取父組件的內(nèi)容(props屬性)

    這篇文章主要介紹了vue子組件獲取父組件的內(nèi)容(props屬性),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue移動(dòng)端項(xiàng)目緩存問(wèn)題實(shí)踐記錄

    vue移動(dòng)端項(xiàng)目緩存問(wèn)題實(shí)踐記錄

    最近在做一個(gè)vue移動(dòng)端項(xiàng)目,被緩存問(wèn)題搞得頭都大了,積累了一些經(jīng)驗(yàn),特此記錄總結(jié)下,分享到腳本之家平臺(tái),對(duì)vue移動(dòng)端項(xiàng)目緩存問(wèn)題實(shí)踐記錄感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • 將vue+nodejs項(xiàng)目部署到服務(wù)器上的實(shí)現(xiàn)

    將vue+nodejs項(xiàng)目部署到服務(wù)器上的實(shí)現(xiàn)

    本文主要介紹了將vue+nodejs項(xiàng)目部署到服務(wù)器上的實(shí)現(xiàn),使用Express生成器部署和前端Vue項(xiàng)目部署,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Vue中的前端crypto.js加解密

    Vue中的前端crypto.js加解密

    這篇文章主要介紹了Vue中的前端crypto.js加解密問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue3使用echarts繪制折線圖的代碼示例

    vue3使用echarts繪制折線圖的代碼示例

    這篇文章主要為大家學(xué)習(xí)介紹了Vue3如何使用echarts實(shí)現(xiàn)繪制折線圖,文中有詳細(xì)的示例代碼供大家參考,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07

最新評(píng)論

沁源县| 修武县| 陈巴尔虎旗| 赤壁市| 洛隆县| 宁陕县| 曲周县| 渭南市| 锦屏县| 长乐市| 潜山县| 永丰县| 宁海县| 开鲁县| 都匀市| 凌源市| 遂宁市| 土默特左旗| 榆中县| 奉节县| 双鸭山市| 乌恰县| 当雄县| 广昌县| 集安市| 巫溪县| 博客| 巩义市| 玉树县| 澄江县| 调兵山市| 桑植县| 应用必备| 池州市| 灵山县| 贡嘎县| 高清| 呼玛县| 颍上县| 湘乡市| 永福县|