zoukankan      html  css  js  c++  java
  • 封装js插件(loading)

    在loading文件夹中写两个文件loading.js与loading.vue

    loading.js

     1 import Loading from './index.vue';
     2 import Vue from 'vue';
     3 export default()=>{
     4     let LoadingComponent=Vue.extend(Loading);
     5     let child=new LoadingComponent({//动态创建挂载点
     6         el:document.createElement("div"),
     7         data:{
     8             flag:false,
     9         },
    10         methods:{
    11             handlemount(){
    12                 this.flag=true;
    13             },
    14             handleDestory(){
    15                 this.flag=false;
    16             }
    17         }
    18     })
    19     document.body.appendChild(child.$mount().$el)
    20     return child;
    21 }

    loading.vue文件为一个loading的模版,从HTML+CSS+loading插件库中取出来的

      1 <template>
      2     <div class="loader" v-if="flag">//利用v-if操控插件的显示与消失。
      3     <div class="loader-inner">
      4         <div class="loader-line-wrap">
      5             <div class="loader-line"></div>
      6         </div>
      7         <div class="loader-line-wrap">
      8             <div class="loader-line"></div>
      9         </div>
     10         <div class="loader-line-wrap">
     11             <div class="loader-line"></div>
     12         </div>
     13         <div class="loader-line-wrap">
     14             <div class="loader-line"></div>
     15         </div>
     16         <div class="loader-line-wrap">
     17             <div class="loader-line"></div>
     18         </div>
     19     </div>
     20 </div>
     21 </template>
     22 
     23 <script>
     24 export default {
     25     name:"Movie" 
     26 }
     27 </script>
     28 
     29 <style>
     30     .loader {
     31     background: #000;
     32     background: radial-gradient(#222, #000);
     33     bottom: 0;
     34     left: 0;
     35     overflow: hidden;
     36     position: fixed;
     37     right: 0;
     38     top: 0;
     39     z-index: 99999;
     40 }
     41 
     42 .loader-inner {
     43     bottom: 0;
     44     height: 60px;
     45     left: 0;
     46     margin: auto;
     47     position: absolute;
     48     right: 0;
     49     top: 0;
     50      100px;
     51 }
     52 
     53 .loader-line-wrap {
     54     animation: 
     55         spin 2000ms cubic-bezier(.175, .885, .32, 1.275) infinite
     56     ;
     57     box-sizing: border-box;
     58     height: 50px;
     59     left: 0;
     60     overflow: hidden;
     61     position: absolute;
     62     top: 0;
     63     transform-origin: 50% 100%;
     64      100px;
     65 }
     66 .loader-line {
     67     border: 4px solid transparent;
     68     border-radius: 100%;
     69     box-sizing: border-box;
     70     height: 100px;
     71     left: 0;
     72     margin: 0 auto;
     73     position: absolute;
     74     right: 0;
     75     top: 0;
     76      100px;
     77 }
     78 .loader-line-wrap:nth-child(1) { animation-delay: -50ms; }
     79 .loader-line-wrap:nth-child(2) { animation-delay: -100ms; }
     80 .loader-line-wrap:nth-child(3) { animation-delay: -150ms; }
     81 .loader-line-wrap:nth-child(4) { animation-delay: -200ms; }
     82 .loader-line-wrap:nth-child(5) { animation-delay: -250ms; }
     83 
     84 .loader-line-wrap:nth-child(1) .loader-line {
     85     border-color: hsl(0, 80%, 60%);
     86     height: 90px;
     87      90px;
     88     top: 7px;
     89 }
     90 .loader-line-wrap:nth-child(2) .loader-line {
     91     border-color: hsl(60, 80%, 60%);
     92     height: 76px;
     93      76px;
     94     top: 14px;
     95 }
     96 .loader-line-wrap:nth-child(3) .loader-line {
     97     border-color: hsl(120, 80%, 60%);
     98     height: 62px;
     99      62px;
    100     top: 21px;
    101 }
    102 .loader-line-wrap:nth-child(4) .loader-line {
    103     border-color: hsl(180, 80%, 60%);
    104     height: 48px;
    105      48px;
    106     top: 28px;
    107 }
    108 .loader-line-wrap:nth-child(5) .loader-line {
    109     border-color: hsl(240, 80%, 60%);
    110     height: 34px;
    111      34px;
    112     top: 35px;
    113 }
    114 
    115 @keyframes spin {
    116     0%, 15% {
    117         transform: rotate(0);
    118     }
    119     100% {
    120         transform: rotate(360deg);
    121     }
    122 }
    123 </style>

    同时在HTTP文件中,

     1 import loading from '../lib/loading/index.js';
     2 
     3 
     4 
     5 let vm=loading()//如果不写这个的话,则下面两步操作的可能不是一个vm,所以在这一步,将
     6 vm对象存起来。
     7 
     8 
     9 
    10 //vm.handlemount();在数据请求的时候显示loading
    11 
    12 server.interceptors.request.use((config)=>{
    13     if(config.method.toUpperCase()==="GET"){
    14         config.params={...config.data}
    15     }else if(config.method.toUpperCase()==="POST"){
    16         config.header["content-type"]="appliaction/x-www-form-urlencoded"
    17     }
    18     vm.handlemount();
    19     return config;
    20 },(err)=>{
    21     Promise.reject(err);
    22 })
    23 
    24 
    25 
    26 //vm.handleDestory();在数据传回来的时候去掉loading。
    27   server.interceptors.response.use((res)=>{
    28     if(res.statusText=="OK"){
    29         vm.handleDestory();
    30         return res.data;
    31     }
    32 },(err)=>{
    33     Promise.reject(err);
    34 })
    35 
    36 export default (method,url,data={})=>{
    37     if(method.toUpperCase()=="GET"){
    38         return server.get(url,{
    39             params:data
    40         })
    41     }else if(method.toUpperCase()=="POST"){
    42         return server.post(url,data);
    43     }
  • 相关阅读:
    最近面试遇到的技术问题
    Oracle 查看表空间使用情况
    流水账日记20150626
    Mantis及TestLink运维问题处理
    Mantis维护之显示姓名
    汤姆猫(。。。。)
    mac配置svn服务器
    如何使用TestFlight进行Beta测试
    artice与section的区别
    article元素设计网络新闻展示
  • 原文地址:https://www.cnblogs.com/muzishijie/p/11325482.html
Copyright © 2011-2022 走看看