1. 程式人生 > >轉載一個 mui 等待動畫 mui.showLoading

轉載一個 mui 等待動畫 mui.showLoading

寫在前面:
好像mui目前dialog系列唯獨缺少showLoading載入框(載入中)元件,為了統一元件樣式和體驗,寫了這麼一個擴充套件外掛。
CSS和JS程式碼耦合性應該還是較低的,不妥之處歡迎指教!
優點:可以同時相容Html5和plus,不必為不同環境單獨分別Loading元件。
缺點:在頁面巢狀情況下,遮罩僅對當前頁面起作用。

使用方法:
#顯示載入框:

mui.showLoading("正在載入..","div"); //載入文字和型別,plus環境中型別為div時強制以div方式顯示

#隱藏載入框:

mui.hideLoading(callback);//隱藏後的回撥函式

注意:
載入框只會顯示一個,多次呼叫showLoading只會顯示最後一次呼叫的內容。

#Javascript程式碼:

//擴充套件mui.showLoading
(function($, window) {
    //顯示載入框
    $.showLoading = function(message,type) {
        if ($.os.plus && type !== 'div') {
            $.plusReady(function() {
                plus.nativeUI.showWaiting(message);
            });
        } else {
            var html = '';
            html += '<i class="mui-spinner mui-spinner-white"></i>';
            html += '<p class="text">' + (message || "資料載入中") + '</p>';

            //遮罩層
            var mask=document.getElementsByClassName("mui-show-loading-mask");
            if(mask.length==0){
                mask = document.createElement('div');
                mask.classList.add("mui-show-loading-mask");
                document.body.appendChild(mask);
                mask.addEventListener("touchmove", function(e){e.stopPropagation();e.preventDefault();});
            }else{
                mask[0].classList.remove("mui-show-loading-mask-hidden");
            }
            //載入框
            var toast=document.getElementsByClassName("mui-show-loading");
            if(toast.length==0){
                toast = document.createElement('div');
                toast.classList.add("mui-show-loading");
                toast.classList.add('loading-visible');
                document.body.appendChild(toast);
                toast.innerHTML = html;
                toast.addEventListener("touchmove", function(e){e.stopPropagation();e.preventDefault();});
            }else{
                toast[0].innerHTML = html;
                toast[0].classList.add("loading-visible");
            }
        }   
    };

    //隱藏載入框
      $.hideLoading = function(callback) {
        if ($.os.plus) {
            $.plusReady(function() {
                plus.nativeUI.closeWaiting();
            });
        } 
        var mask=document.getElementsByClassName("mui-show-loading-mask");
        var toast=document.getElementsByClassName("mui-show-loading");
        if(mask.length>0){
            mask[0].classList.add("mui-show-loading-mask-hidden");
        }
        if(toast.length>0){
            toast[0].classList.remove("loading-visible");
            callback && callback();
        }
      }
})(mui, window);

#CSS程式碼

/*----------------mui.showLoading---------------*/
.mui-show-loading {
    position: fixed;
    padding: 5px;
    width: 120px;
    min-height: 120px;
    top: 45%;
    left: 50%;
    margin-left: -60px;
    background: rgba(0, 0, 0, 0.6);
    text-align: center;
    border-radius: 5px;
    color: #FFFFFF;
    visibility: hidden;
    margin: 0;
    z-index: 2000;

    -webkit-transition-duration: .2s;
    transition-duration: .2s;
    opacity: 0;
    -webkit-transform: scale(0.9) translate(-50%, -50%);
    transform: scale(0.9) translate(-50%, -50%);
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;
}
.mui-show-loading.loading-visible {
    opacity: 1;
    visibility: visible;
    -webkit-transform: scale(1) translate(-50%, -50%);
    transform: scale(1) translate(-50%, -50%);
}
.mui-show-loading .mui-spinner{
    margin-top: 24px;
    width: 36px;
    height: 36px;
}
.mui-show-loading .text {
    line-height: 1.6;
    font-family: -apple-system-font,"Helvetica Neue",sans-serif;
    font-size: 14px;
    margin: 10px 0 0;
    color: #fff;
}

.mui-show-loading-mask {
  position: fixed;
  z-index: 1000;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
}
.mui-show-loading-mask-hidden{
    display: none !important;
}

#效果 點我檢視實際演示效果

本文非原創 轉自分享一個mui擴充套件外掛mui.showLoading載入框