jquery easyui 等待特效 js+css實現

先看效果圖:

1、引入easyui所需要的js和css

   <link href="plugins/easyui1_7_0/themes/default/easyui.css" rel="stylesheet" />
    <link href="plugins/easyui1_7_0/themes/icon.css" rel="stylesheet" />
     <script src="plugins/easyui1_7_0/jquery.min.js"></script>
    <script src="plugins/easyui1_7_0/jquery.easyui.min.js"></script>
    <script src="plugins/easyui1_7_0/locale/easyui-lang-zh_CN.js"></script>

2、編寫等待的css動畫特效

這段特效是在網上找到的

.loading{   
     width: 80px;   
     height: 40px;   
     margin: 0 auto;   
     margin-top:10px;   
 }   
 .loading span{   
     display: inline-block;   
     width: 8px;   
     height: 100%;   
     border-radius: 4px;   
     background: lightgreen;   
     -webkit-animation: load 1s ease infinite;   
 }   

 @-webkit-keyframes load{   
     0%,100%{   
         height: 40px;   
         background: lightgreen;   
     }   
     50%{   
         height: 70px;   
         margin: -15px 0;   
         background: lightblue;   
     }   
 }   
 .loading span:nth-child(2){   
     -webkit-animation-delay:0.2s;   
 }   
 .loading span:nth-child(3){   
     -webkit-animation-delay:0.4s;   
 }   
 .loading span:nth-child(4){   
     -webkit-animation-delay:0.6s;   
 }   
 .loading span:nth-child(5){   
     -webkit-animation-delay:0.8s;   
 }  

3、編寫JS

3.1寫一個函數 通過時間獲得隨機數,用來作爲生成的div的ID

const now = new Date();
        let month = now.getMonth() + 1;
        let day = now.getDate();
        let hour = now.getHours();
        let minutes = now.getMinutes();
        let seconds = now.getSeconds();
        return "eloading_"+now.getFullYear().toString() + month.toString() + day + hour + minutes + seconds + (Math.round(Math.random() * 23 + 100)).toString();

3.2生成html

因爲用到了easyui的window,因此需要在最外層給一個div class爲easyui-window,並根據easyui的文檔設置title等window相關option

window內是一個class爲content的div,content裏面放加載動畫效果,加載中的動畫結構是一個class爲loading的div,裏面放4個span即可

window需要隱藏關閉按鈕、邊框、頭部標題欄

所以option爲

{collapsible:false,minimizable:false,maximizable:false,closable:false,modal:true,closed:true,border:false,noheader:true}

nohead爲不顯示頭部標題欄 ,closable:false不顯示關閉按鈕  modal:true顯示遮罩層(其他部分不能被點擊)border:false 隱藏邊框

直接上代碼

let html = '<div id="'+loadId+'" class="easyui-window" title="數據正在加載中"  data-options="collapsible:false,minimizable:false,maximizable:false,closable:false,modal:true,closed:true,border:false,noheader:true" style="width: 300px; height: auto; padding: 10px;background: rgba(255, 255, 255,0.8)">';
        html+='<div class="content" style="width:100%;">';
        html+='<div class="loading" style="margin-left: 110px; margin-top: 20px;">\n<span></span>\n<span></span>\n<span></span>\n<span></span>\n<span></span></div>';
        html+='<div style="margin-top:15px;text-align:center;color:red;font-size:10px;">'+text+'</div></div></div>';

詳情參閱easyui的window 。

 

3.3上面的html添加到<body>節點裏面

 $("body").append(html);

3.4顯示加載中提示動畫

用dialog的open即可顯示

$("#"+你的id).dialog('open');

3.5 加載完成關閉提示動畫

$('#'+你的id).dialog('close');

3.6銷燬

爲了不讓頁面很累贅,對剛纔生成的彈出層節點進行銷燬

$("#"+this.id).parent().next(".window-shadow").next(".window-mask").remove();
$("#"+this.id).parent().next(".window-shadow").remove();
$("#"+this.id).parent().remove();

如此,全部完成。

 

 

我把它寫成了一個插件,以下是全部js代碼:

var easyloading = {
    init: function (text) {
        let loadingobj={};
        if (text == undefined || text == null) {
            text = "正在拼了命的爲您加載中";
        }
        const loadId=easyloading.getid();
        let html = '<div id="'+loadId+'" class="easyui-window" title="數據正在加載中"  data-options="collapsible:false,minimizable:false,maximizable:false,closable:false,modal:true,closed:true,border:false,noheader:true" style="width: 300px; height: auto; padding: 10px;background: rgba(255, 255, 255,0.8)">';
        html+='<div class="content" style="width:100%;">';
        html+='<div class="loading" style="margin-left: 110px; margin-top: 20px;">\n<span></span>\n<span></span>\n<span></span>\n<span></span>\n<span></span></div>';
        html+='<div style="margin-top:15px;text-align:center;color:red;font-size:10px;">'+text+'</div></div></div>';
        $("body").append(html);
        loadingobj.id=loadId;
        loadingobj.init=false;
        loadingobj.show=function(){
            console.log(this.id);
            if(!this.init){
                $('#'+this.id).window({collapsible:false,minimizable:false,maximizable:false,closable:false,modal:true,closed:true,border:false,noheader:true});
                this.init=true;
            }
            $('#'+this.id).dialog('open');
        };
        loadingobj.close=function(){
            $('#'+this.id).dialog('close');
        }
        loadingobj.dispose=function(){
            $("#"+this.id).parent().next(".window-shadow").next(".window-mask").remove();
            $("#"+this.id).parent().next(".window-shadow").remove();
            $("#"+this.id).parent().remove();
            this.init=false;
            return undefined;
        }
        return loadingobj;
    },
    getid:function(){
        const now = new Date();
        let month = now.getMonth() + 1;
        let day = now.getDate();
        let hour = now.getHours();
        let minutes = now.getMinutes();
        let seconds = now.getSeconds();
        return "eloading_"+now.getFullYear().toString() + month.toString() + day + hour + minutes + seconds + (Math.round(Math.random() * 23 + 100)).toString();
    }
};

完整的demo源代碼:

https://download.csdn.net/download/zinechina/11996395

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章