知行合一
知行合一
  • 发布:2017-10-23 08:15
  • 更新:2020-08-26 15:12
  • 阅读:35773

分享一个mui扩展插件mui.showLoading加载框

分类:MUI

写在前面:
好像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;  
}

预览效果:

PS
我搞不懂为什么这个编辑器这么渣~

22 关注 分享
skysowe 赵梦欢 5***@qq.com miskss 秋天无风 w***@126.com LornaShaw 湖东呀 niunan222 Yizhiyu y***@163.com lhyh 7***@qq.com Trust k***@126.com 9***@qq.com 4***@qq.com w***@qq.com l***@aliyun.com 付楚 自学的烦恼 2***@qq.com

要回复文章请先登录注册

[已删除]

[已删除]

```//扩展mui.showLoading
(function ($, window) {
//显示加载框
var old_back = $.back,
back = '';
$.showLoading = function (message, type, options) {
options = options || {};
back = options.back;
message = message !== undefined ? message : '数据加载中...';
if ($.os.plus && type !== 'div') {
$.plusReady(function () {
plus.nativeUI.showWaiting(message, options);
});
} else {
var html = '';
if (options.loading && options.loading.icon && options.loading.icon.indexOf('.') > -1) {
html += '<img class="mui-mySpinnerImg" src="' + options.loading.icon + '" alt="">';
} else {
html += '<i class="' + (options.loading && options.loading.icon ? options.loading.icon : 'mui-spinner mui-spinner-white') + '"></i>';
}
message && (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");
}
if (back === 'none') {
$.back = returnFalse
}else if(back === 'close'){
$.back = $.hideLoading;
}
}
};
//隐藏加载框
$.hideLoading = function (callback) {
if ($.os.plus) {
$.plusReady(function () {
plus.nativeUI.closeWaiting();
});
}
if (back === 'none' || back === 'close') {
$.back = old_back;
}
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();
}
};

function returnFalse() {
return !1
}
})(mui, window);```改进了一下...加了5+的option和可以放个动图进去显示加载框
2020-08-26 15:12
zcjshijie

zcjshijie

大佬,为什么你这个加上隐藏,div就不显示了?去掉隐藏就一直在哪里转,求解答
2020-08-18 16:46
付楚

付楚

mark
2019-07-25 17:42
1***@qq.com

1***@qq.com

大佬,为什么你这个隐藏没有用呢?我这边把mui.hideLoading(callback);里面的callback删除之后才可以?对应的js文件也要删除
2019-07-22 16:45
3***@qq.com

3***@qq.com

感谢
2019-04-24 19:41
崮生

崮生

感谢
2019-04-11 10:34
1***@qq.com

1***@qq.com

谢大佬,已添加到mui.js里面了。
2019-03-18 17:25
7***@qq.com

7***@qq.com

谢大佬 本来想自己写的 发现有现成的就引用了
2019-03-13 16:15
w***@qq.com

w***@qq.com

已添加到项目中,感谢大神!
2019-01-02 14:08
木杉丶

木杉丶

很好用,页面和app都可以用,感谢。
2018-11-30 15:11