202 lines
7.8 KiB
JavaScript
202 lines
7.8 KiB
JavaScript
/* Author:mingyuhisoft@163.com
|
||
* Github:https://github.com/imingyu/jquery.mloading
|
||
* Npm:npm install jquery.mloading.js
|
||
* Date:2016-7-4
|
||
*/
|
||
|
||
;(function (root, factory) {
|
||
'use strict';
|
||
|
||
if (typeof module === 'object' && typeof module.exports === 'object') {
|
||
factory(require('jquery'),root);
|
||
} if(typeof define ==="function"){
|
||
if(define.cmd){
|
||
define(function(require, exports, module){
|
||
var $ = require("jquery");
|
||
factory($,root);
|
||
});
|
||
}else{
|
||
define(["jquery"],function($){
|
||
factory($,root);
|
||
});
|
||
}
|
||
}else {
|
||
factory(root.jQuery,root);
|
||
}
|
||
} (typeof window !=="undefined" ? window : this, function ($, root, undefined) {
|
||
'use strict';
|
||
if(!$){
|
||
$ = root.jQuery || null;
|
||
}
|
||
if(!$){
|
||
throw new TypeError("必须引入jquery库方可正常使用!");
|
||
}
|
||
|
||
var arraySlice = Array.prototype.slice,
|
||
comparison=function (obj1,obj2) {
|
||
var result=true;
|
||
for(var pro in obj1){
|
||
if(obj1[pro] !== obj2[obj1]){
|
||
result=true;
|
||
break;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
function MLoading(dom,options) {
|
||
options=options||{};
|
||
this.dom=dom;
|
||
this.options=$.extend(true,{},MLoading.defaultOptions,options);
|
||
this.curtain=null;
|
||
this.render().show();
|
||
}
|
||
MLoading.prototype={
|
||
constructor:MLoading,
|
||
initElement:function () {
|
||
var dom=this.dom,
|
||
ops=this.options;
|
||
var curtainElement=dom.children(".mloading"),
|
||
bodyElement = curtainElement.children('.mloading-body'),
|
||
barElement = bodyElement.children('.mloading-bar'),
|
||
iconElement = barElement.children('.mloading-icon'),
|
||
textElement = barElement.find(".mloading-text");
|
||
if (curtainElement.length == 0) {
|
||
curtainElement = $('<div class="mloading"></div>');
|
||
dom.append(curtainElement);
|
||
}
|
||
if (bodyElement.length == 0) {
|
||
bodyElement = $('<div class="mloading-body"></div>');
|
||
curtainElement.append(bodyElement);
|
||
}
|
||
if (barElement.length == 0) {
|
||
barElement = $('<div class="mloading-bar"></div>');
|
||
bodyElement.append(barElement);
|
||
}
|
||
if (iconElement.length == 0) {
|
||
var _iconElement=document.createElement(ops.iconTag);
|
||
iconElement = $(_iconElement);
|
||
iconElement.addClass("mloading-icon");
|
||
barElement.append(iconElement);
|
||
}
|
||
if (textElement.length == 0) {
|
||
textElement = $('<span class="mloading-text"></span>');
|
||
barElement.append(textElement);
|
||
}
|
||
|
||
this.curtainElement=curtainElement;
|
||
this.bodyElement = bodyElement;
|
||
this.barElement = barElement;
|
||
this.iconElement = iconElement;
|
||
this.textElement = textElement;
|
||
return this;
|
||
},
|
||
render:function () {
|
||
var dom=this.dom,
|
||
ops=this.options;
|
||
this.initElement();
|
||
if(dom.is("html") || dom.is("body")){
|
||
this.curtainElement.addClass("mloading-full");
|
||
}else{
|
||
this.curtainElement.removeClass("mloading-full");
|
||
|
||
if(!dom.hasClass("mloading-container")){
|
||
dom.addClass("mloading-container");
|
||
}
|
||
}
|
||
if(ops.mask){
|
||
this.curtainElement.addClass("mloading-mask");
|
||
}else{
|
||
this.curtainElement.removeClass("mloading-mask");
|
||
}
|
||
if(ops.content!="" && typeof ops.content!="undefined"){
|
||
if(ops.html){
|
||
this.bodyElement.html(ops.content);
|
||
}else{
|
||
this.bodyElement.text(ops.content);
|
||
}
|
||
}else{
|
||
this.iconElement.attr("src",ops.icon);
|
||
if(ops.html){
|
||
this.textElement.html(ops.text);
|
||
}else{
|
||
this.textElement.text(ops.text);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
setOptions:function (options) {
|
||
options=options||{};
|
||
var oldOptions = this.options;
|
||
this.options = $.extend(true,{},this.options,options);
|
||
if(!comparison(oldOptions,this.options)) this.render();
|
||
},
|
||
show:function () {
|
||
var dom=this.dom,
|
||
ops=this.options,
|
||
barElement=this.barElement;
|
||
this.curtainElement.addClass("active");
|
||
barElement.css({
|
||
"marginTop":"-"+barElement.outerHeight()/2+"px",
|
||
"marginLeft":"-"+barElement.outerWidth()/2+"px"
|
||
});
|
||
|
||
return this;
|
||
},
|
||
hide:function () {
|
||
var dom=this.dom,
|
||
ops=this.options;
|
||
this.curtainElement.removeClass("active");
|
||
if(!dom.is("html") && !dom.is("body")){
|
||
dom.removeClass("mloading-container");
|
||
}
|
||
return this;
|
||
},
|
||
destroy:function () {
|
||
var dom=this.dom,
|
||
ops=this.options;
|
||
this.curtainElement.remove();
|
||
if(!dom.is("html") && !dom.is("body")){
|
||
dom.removeClass("mloading-container");
|
||
}
|
||
dom.removeData(MLoading.dataKey);
|
||
return this;
|
||
}
|
||
};
|
||
MLoading.dataKey="MLoading";
|
||
MLoading.defaultOptions = {
|
||
text:"加载中...",
|
||
iconTag:"img",
|
||
icon:"data:image/gif;base64,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",
|
||
html:false,
|
||
content:"",//设置content后,text和icon设置将无效
|
||
mask:true//是否显示遮罩(半透明背景)
|
||
};
|
||
|
||
$.fn.mLoading=function (options) {
|
||
var ops={},
|
||
funName="",
|
||
funArgs=[];
|
||
if(typeof options==="object"){
|
||
ops = options;
|
||
}else if(typeof options ==="string"){
|
||
funName=options;
|
||
funArgs = arraySlice.call(arguments).splice(0,1);
|
||
}
|
||
return this.each(function (i,element) {
|
||
var dom = $(element),
|
||
plsInc=dom.data(MLoading.dataKey);
|
||
if(!plsInc){
|
||
plsInc=new MLoading(dom,ops);
|
||
}
|
||
|
||
if(funName){
|
||
var fun = plsInc[funName];
|
||
if(typeof fun==="function"){
|
||
fun.apply(plsInc,funArgs);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
})); |