jquery的blockUI遮罩层的使用

avatar
作者
猴君
阅读量:0
  • Thanks to Amir-Hossein Sobhi for some excellent contributions!

*/

;(function() {

/*jshint eqeqeq:false curly:false latedef:false */

“use strict”;

function setup($) {

$.fn._fadeIn = $.fn.fadeIn;

var noOp = $.noop || function() {};

// this bit is to ensure we don’t call setExpression when we shouldn’t (with extra muscle to handle

// confusing userAgent strings on Vista)

var msie = /MSIE/.test(navigator.userAgent);

var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);

var mode = document.documentMode || 0;

var setExpr = $.isFunction( document.createElement(‘div’).style.setExpression );

// global $ methods for blocking/unblocking the entire page

$.blockUI = function(opts) { install(window, opts); };

$.unblockUI = function(opts) { remove(window, opts); };

// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)

$.growlUI = function(title, message, timeout, onClose) {

var $m = $(‘

’);

if (title) $m.append(‘

’+title+‘

’);

if (message) $m.append(‘

’+message+‘

’);

if (timeout === undefined) timeout = 3000;

// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications

var callBlock = function(opts) {

opts = opts || {};

$.blockUI({

message: $m,

fadeIn : typeof opts.fadeIn !== ‘undefined’ ? opts.fadeIn : 700,

fadeOut: typeof opts.fadeOut !== ‘undefined’ ? opts.fadeOut : 1000,

timeout: typeof opts.timeout !== ‘undefined’ ? opts.timeout : timeout,

centerY: false,

showOverlay: false,

onUnblock: onClose,

css: $.blockUI.defaults.growlCSS

});

};

callBlock();

var nonmousedOpacity = $m.css(‘opacity’);

$m.mouseover(function() {

callBlock({

fadeIn: 0,

timeout: 30000

});

var displayBlock = $(‘.blockMsg’);

displayBlock.stop(); // cancel fadeout if it has started

displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency

}).mouseout(function() {

$(‘.blockMsg’).fadeOut(1000);

});

// End konapun additions

};

// plugin method for blocking element content

$.fn.block = function(opts) {

if ( this[0] === window ) {

$.blockUI( opts );

return this;

}

var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});

this.each(function() {

var $el = $(this);

if (fullOpts.ignoreIfBlocked && $el.data(‘blockUI.isBlocked’))

return;

$el.unblock({ fadeOut: 0 });

});

return this.each(function() {

if ($.css(this,‘position’) == ‘static’) {

this.style.position = ‘relative’;

$(this).data(‘blockUI.static’, true);

}

this.style.zoom = 1; // force ‘hasLayout’ in ie

install(this, opts);

});

};

// plugin method for unblocking element content

$.fn.unblock = function(opts) {

if ( this[0] === window ) {

$.unblockUI( opts );

return this;

}

return this.each(function() {

remove(this, opts);

});

};

$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!

// override these in your code to change the default behavior and style

$.blockUI.defaults = {

// message displayed when blocking (use null for no message)

message: ‘

Please wait…

’,

title: null, // title string; only used when theme == true

draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)

theme: false, // set to true to use with jQuery UI themes

// styles for the message when blocking; if you wish to disable

// these and use an external stylesheet then do this in your code:

// $.blockUI.defaults.css = {};

css: {

padding: 0,

margin: 0,

width: ‘30%’,

top: ‘40%’,

left: ‘35%’,

textAlign: ‘center’,

color: ‘#000’,

border: ‘3px solid #aaa’,

backgroundColor:‘#fff’,

cursor: ‘wait’

},

// minimal style set used when themes are used

themedCSS: {

width: ‘30%’,

top: ‘40%’,

left: ‘35%’

},

// styles for the overlay

overlayCSS: {

backgroundColor: ‘#000’,

opacity: 0.6,

cursor: ‘wait’

},

// style to replace wait cursor before unblocking to correct issue

// of lingering wait cursor

cursorReset: ‘default’,

// styles applied when using $.growlUI

growlCSS: {

width: ‘350px’,

top: ‘10px’,

left: ‘’,

right: ‘10px’,

border: ‘none’,

padding: ‘5px’,

opacity: 0.6,

cursor: ‘default’,

color: ‘#fff’,

backgroundColor: ‘#000’,

‘-webkit-border-radius’:‘10px’,

‘-moz-border-radius’: ‘10px’,

‘border-radius’: ‘10px’

},

// IE issues: ‘about:blank’ fails on HTTPS and javascript:false is s-l-o-w

// (hat tip to Jorge H. N. de Vasconcelos)

/*jshint scripturl:true */

iframeSrc: /^https/i.test(window.location.href || ‘’) ? ‘javascript:false’ : ‘about:blank’,

// force usage of iframe in non-IE browsers (handy for blocking applets)

forceIframe: false,

// z-index for the blocking overlay

baseZ: 1000,

// set these to true to have the message automatically centered

centerX: true, // <-- only effects element blocking (page block controlled via css above)

centerY: true,

// allow body element to be stetched in ie6; this makes blocking look better

// on “short” pages. disable if you wish to prevent changes to the body height

allowBodyStretch: true,

// enable if you want key and mouse events to be disabled for content that is blocked

bindEvents: true,

// be default blockUI will supress tab navigation from leaving blocking content

// (if bindEvents is true)

constrainTabKey: true,

// fadeIn time in millis; set to 0 to disable fadeIn on block

fadeIn: 200,

// fadeOut time in millis; set to 0 to disable fadeOut on unblock

fadeOut: 400,

// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock

timeout: 0,

// disable if you don’t want to show the overlay

showOverlay: true,

// if true, focus will be placed in the first available input field when

// page blocking

focusInput: true,

// elements that can receive focus

focusableElements: ‘:input:enabled:visible’,

// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)

// no longer needed in 2012

// applyPlatformOpacityRules: true,

// callback method invoked when fadeIn has completed and blocking message is visible

onBlock: null,

// callback method invoked when unblocking has completed; the callback is

// passed the element that has been unblocked (which is the window object for page

// blocks) and the options that were passed to the unblock call:

// onUnblock(element, options)

onUnblock: null,

// callback method invoked when the overlay area is clicked.

// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.

onOverlayClick: null,

// don’t ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493

quirksmodeOffsetHack: 4,

// class name of the message block

blockMsgClass: ‘blockMsg’,

// if it is already blocked, then ignore it (don’t unblock and reblock)

ignoreIfBlocked: false

};

// private data and functions follow…

var pageBlock = null;

var pageBlockEls = [];

function install(el, opts) {

var css, themedCSS;

var full = (el == window);

var msg = (opts && opts.message !== undefined ? opts.message : undefined);

opts = $.extend({}, $.blockUI.defaults, opts || {});

if (opts.ignoreIfBlocked && $(el).data(‘blockUI.isBlocked’))

return;

opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});

css = $.extend({}, $.blockUI.defaults.css, opts.css || {});

if (opts.onOverlayClick)

opts.overlayCSS.cursor = ‘pointer’;

themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});

msg = msg === undefined ? opts.message : msg;

// remove the current block (if there is one)

if (full && pageBlock)

remove(window, {fadeOut:0});

// if an existing element is being used as the blocking content then we capture

// its current place in the DOM (and current display style) so we can restore

// it when we unblock

if (msg && typeof msg != ‘string’ && (msg.parentNode || msg.jquery)) {

var node = msg.jquery ? msg[0] : msg;

var data = {};

$(el).data(‘blockUI.history’, data);

data.el = node;

data.parent = node.parentNode;

data.display = node.style.display;

data.position = node.style.position;

if (data.parent)

data.parent.removeChild(node);

}

$(el).data(‘blockUI.onUnblock’, opts.onUnblock);

var z = opts.baseZ;

// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;

// layer1 is the iframe layer which is used to supress bleed through of underlying content

// layer2 is the overlay layer which has opacity and a wait cursor (by default)

// layer3 is the message content that is displayed while blocking

var lyr1, lyr2, lyr3, s;

if (msie || opts.forceIframe)

lyr1 = $(‘’);

else

lyr1 = $(‘

’);

if (opts.theme)

lyr2 = $(‘

’);

else

lyr2 = $(‘

’);

if (opts.theme && full) {

s = ‘

’;

if ( opts.title ) {

s += ‘

’+(opts.title || ’ ‘)+’ ';

}

s += ‘

’;

s += ‘’;

}

else if (opts.theme) {

s = ‘

’;

if ( opts.title ) {

s += ‘

’+(opts.title || ’ ‘)+’ ';

}

s += ‘

’;

s += ‘’;

}

else if (full) {

s = ‘

’;

}

else {

s = ‘

’;

}

lyr3 = $(s);

// if we have a message, style it

if (msg) {

if (opts.theme) {

lyr3.css(themedCSS);

lyr3.addClass(‘ui-widget-content’);

}

else

lyr3.css(css);

}

// style the overlay

if (!opts.theme /&& (!opts.applyPlatformOpacityRules)/)

lyr2.css(opts.overlayCSS);

lyr2.css(‘position’, full ? ‘fixed’ : ‘absolute’);

// make iframe layer transparent in IE

if (msie || opts.forceIframe)

lyr1.css(‘opacity’,0.0);

//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? ‘body’ : el);

var layers = [lyr1,lyr2,lyr3], $par = full ? $(‘body’) : $(el);

$.each(layers, function() {

this.appendTo($par);

});

if (opts.theme && opts.draggable && $.fn.draggable) {

lyr3.draggable({

handle: ‘.ui-dialog-titlebar’,

cancel: ‘li’

});

}

// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)

var expr = setExpr && (!$.support.boxModel || $(‘object,embed’, full ? null : el).length > 0);

if (ie6 || expr) {

// give body 100% height

if (full && opts.allowBodyStretch && $.support.boxModel)

$(‘html,body’).css(‘height’,‘100%’);

// fix ie6 issue when blocked element has a border width

if ((ie6 || !$.support.boxModel) && !full) {

var t = sz(el,‘borderTopWidth’), l = sz(el,‘borderLeftWidth’);

var fixT = t ? ‘(0 - ‘+t+’)’ : 0;

var fixL = l ? ‘(0 - ‘+l+’)’ : 0;

}

// simulate fixed position

$.each(layers, function(i,o) {

var s = o[0].style;

s.position = ‘absolute’;

if (i < 2) {

if (full)

s.setExpression(‘height’,‘Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:’+opts.quirksmodeOffsetHack+‘) + “px”’);

else

s.setExpression(‘height’,‘this.parentNode.offsetHeight + “px”’);

if (full)

s.setExpression(‘width’,‘jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + “px”’);

else

s.setExpression(‘width’,‘this.parentNode.offsetWidth + “px”’);

if (fixL) s.setExpression(‘left’, fixL);

if (fixT) s.setExpression(‘top’, fixT);

}

else if (opts.centerY) {

if (full) s.setExpression(‘top’,‘(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + “px”’);

s.marginTop = 0;

}

else if (!opts.centerY && full) {

var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;

var expression = ‘((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + ‘+top+’) + “px”’;

s.setExpression(‘top’,expression);

}

});

}

// show the message

if (msg) {

if (opts.theme)

lyr3.find(‘.ui-widget-content’).append(msg);

else

lyr3.append(msg);

if (msg.jquery || msg.nodeType)

$(msg).show();

}

if ((msie || opts.forceIframe) && opts.showOverlay)

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。


enterY && full) {

var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;

var expression = ‘((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + ‘+top+’) + “px”’;

s.setExpression(‘top’,expression);

}

});

}

// show the message

if (msg) {

if (opts.theme)

lyr3.find(‘.ui-widget-content’).append(msg);

else

lyr3.append(msg);

if (msg.jquery || msg.nodeType)

$(msg).show();

}

if ((msie || opts.forceIframe) && opts.showOverlay)

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

[外链图片转存中…(img-W2P7L1TH-1718014229510)]

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!