轉載一個 mui 等待動畫 mui.showLoading
阿新 • • 發佈:2018-12-20
寫在前面:
好像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載入框