使用jQuery制作Web页面遮罩层插件的实例教程 - Web前端
作者:98wpeu发布时间:2026-08-22分类:网页前端技术浏览:3
导读:在网页上经常遇到需要等待很久的操作,比如导出报表等。为了预防用户点击其他操作或者多次点击同个功能,需要用遮罩层把页面或者操作区盖住,防止用户进行下一步操作,同时可以提高界面友好度,...
在网页上经常遇到需要等待很久的操作,比如导出报表等。为了预防用户点击其他操作或者多次点击同个功能,需要用遮罩层把页面或者操作区盖住,防止用户进行下一步操作,同时可以提高界面友好度,让用户知道操作正在执行。
$.fn.extend({
/**
* 给元素添加遮罩层
* @param message {string} [可选]遮罩层显示内容
*/
mask: function (message) {
var $target = this,
fixed = false,
targetStatic = true;
if (Object.prototype.toString.call(message) !== '[object String]' || !message) {
//如果message为空或者不是字符串,则用默认的消息提示。
message = '请稍候。。。';
}
if ($target.length === 0) {
$target = $('body');
} else {
if ($target.length > 1) {
$target = $target.first();
}
if ($target[0] === window || $target[0] === document) {
$target = $('body');
}
}
if($target[0] === document.body){
fixed = true;
}
//如果目标元素已经有遮罩层,获取遮罩层
var old = $target.data('rhUI.mask');
if (old) {
old.$content.html(message);
center($target, old.$content, fixed);
return;
}
//如果被遮盖的元素是static,把元素改成relative
if ($target.CSS('position') === 'static') {
targetStatic = true;
$target.css('position', 'relative');
}
var $content, $overlay;
if (fixed) {
$overlay = $('<div class="rhui-mask" style="position:fixed;"></div>');
$content = $('<div class="rhui-mask-content" style="position:fixed;">' + message + '</div>');
} else {
$overlay = $('<div class="rhui-mask"></div>');
$content = $('<div class="rhui-mask-content">' + message + '</div>');
}
$overlay.appendTo($target);
$content.APPendTo($target);
//显示遮罩层
$overlay.show();
$content.show();
//让遮罩层居中
center($target, $content, fixed);
//把遮罩层信息添加到$target
$target.data('rhui.mask', {
fixed: fixed,
$overlay: $overlay,
$content: $content,
targetStatic: targetStatic
});
/**
* 让遮罩层内容居中显示
* @param $target 被遮盖的元素
* @param $content 遮罩层内容元素
* @param fixed 遮罩层是否固定显示
*/
function center($target, $content, fixed) {
var $window,
height = $content.outerHeight(true),
width = $content.outerWidth(true);
if (fixed) {
//如果遮罩层固定显示,让遮罩层在window居中
$window = $(window);
$content.css({
left: ($window.width() - width) / 2,
top: ($window.height() - height) / 2
});
} else {
//让遮罩层在$target中居中
$content.css({
left: ($target.width() - width) / 2,
top: ($target.height() - height) / 2
});
}
}
},
/**
* 取消遮罩层
*/
unmask: function () {
var $target;
if (this.length === 0) {
$target = $('body');
} else {
$target = this.first();
if ($target[0] === window || $target[0] === document) {
$target = $('body');
}
}
var data = $target.data('rhui.mask');
if (!data) {
return;
}
//还原目标元素的position属性
if (data.targetStatic) {
$target.css('position', 'static');
}
data.$overlay.remove();
data.$content.remove();
$target.removeData('rhui.mask');
}
});
插件样式由rhui-mask和rhui-mask-content类控制,rhui-mask是遮罩层样式,rhui-mask-content是遮罩层的提示内容样式。
/* 遮罩层样式 */
.rhui-mask {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 9000;
display: block;
margin: 0;
padding: 0;
border-style: none;
background-color: #777;
opacity: 0.3;
Zoom: 1;
filter: alpha(opacity=30);
}
/* 遮罩层显示内容样式 */
.rhui-mask-content {
position: absolute;
z-index: 9999;
display: block;
margin: 0;
padding: 15px 20px;
border: 2px solid rgb(109, 157, 215);
background-color: #fff;
color: blue;
letter-spacing: 2px;
font-weight: bold;
font-size: 15px;
cursor: wAIt;
}
效果如图所示

页面调用完整代码
<!DOCtype HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>网页遮罩层的实现</title>
<style type="text/css">
/* 遮罩层样式 */
.rhui-mask {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 9000;
display: block;
margin: 0;
padding: 0;
border-style: none;
background-color: #777;
opacity: 0.3;
zoom: 1;
filter: alpha(opacity=30);
}
/* 遮罩层显示内容样式 */
.rhui-mask-content {
position: absolute;
z-index: 9999;
display: block;
margin: 0;
padding: 15px 20px;
border: 2px solid rgb(109, 157, 215);
background-color: #fff;
color: blue;
letter-spacing: 2px;
font-weight: bold;
font-size: 15px;
Cursor: wait;
}
</style>
<script type="text/javascript" src="HTTP://CDN.bootcss.com/JQuery/1.11.3/jQuery.JS"></script>
<script type="text/JavaScript">
$.fn.extend({
/**
* 给元素添加遮罩层
* @param message {String} [可选]遮罩层显示内容
*/
mask: function (message) {
var $target = this,
fixed = false,
targetStatic = true;
if (Object.PRototype.toString.call(message) !== '[object String]' || !message) {
//如果message为空或者不是字符串,则用默认的消息提示。
message = '请稍候。。。';
}
if ($target.length === 0) {
$target = $('body');
} else {
if ($target.length > 1) {
$target = $target.first();
}
if ($target[0] === window || $target[0] === document) {
$target = $('body');
}
}
if ($target[0] === document.body) {
fixed = true;
}
//如果目标元素已经有遮罩层,获取遮罩层
var old = $target.data('rhui.mask');
if (old) {
old.$content.html(message);
center($target, old.$content, fixed);
return;
}
//如果被遮盖的元素是static,把元素改成relative
if ($target.css('position') === 'static') {
targetStatic = true;
$target.css('position', 'relative');
}
var $content, $overlay;
if (fixed) {
$overlay = $('<div class="rhui-mask" style="position:fixed;"></div>');
$content = $('<div class="rhui-mask-content" style="position:fixed;">' + message + '</div>');
} else {
$overlay = $('<div class="rhui-mask"></div>');
$content = $('<div class="rhui-mask-content">' + message + '</div>');
}
$overlay.appendTo($target);
$content.AppendTo($target);
//显示遮罩层
$overlay.show();
$content.show();
//让遮罩层居中
center($target, $content, fixed);
//把遮罩层信息添加到$target
$target.data('rhui.mask', {
fixed: fixed,
$overlay: $overlay,
$content: $content,
targetStatic: targetStatic
});
/**
* 让遮罩层内容居中显示
* @param $target 被遮盖的元素
* @param $content 遮罩层内容元素
* @param fixed 遮罩层是否固定显示
*/
function center($target, $content, fixed) {
var $window,
height = $content.outerHeight(true),
width = $content.outerWidth(true);
if (fixed) {
//如果遮罩层固定显示,让遮罩层在window居中
$window = $(window);
$content.css({
left: ($window.width() - width) / 2,
top: ($window.height() - height) / 2
});
} else {
//让遮罩层在$target中居中
$content.css({
left: ($target.width() - width) / 2,
top: ($target.height() - height) / 2
});
}
}
},
/**
* 取消遮罩层
*/
unmask: function () {
var $target;
if (this.length === 0) {
$target = $('body');
} else {
$target = this.first();
if ($target[0] === window || $target[0] === document) {
$target = $('body');
}
}
var data = $target.data('rhui.mask');
if (!data) {
return;
}
//还原目标元素的position属性
if (data.targetStatic) {
$target.css('position', 'static');
}
data.$overlay.remove();
data.$content.remove();
$target.removeData('rhui.mask');
}
});
</script>
</head>
<body>
<div id="div" style="width:600px;height:300px;margin:10px;border:1px solid red;"></div>
<script type="text/Javascript">
$(function () {
//遮盖整个页面
//只要对window、document和body使用遮罩层,都会遮盖整个页面
//$(window).mask();
//$(window).unmask(); 取消遮罩
//遮盖div
$('#div').mask('加载中,请稍候。。。');
});
</script>
</body>
</html>
相关推荐
- Jquery 自定义事件实现发布/订阅的简单实例 - Web前端
- jQuery使用each方法与for语句遍历数组示例 - Web前端
- 使用jquery提交form表单并自定义action的方法 - Web前端
- 基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合 - Web前端
- 深入理解jquery跨域请求方法 - Web前端
- jQuery实现摸拟alert提示框 - Web前端
- jquery实现表格中点击相应行变色功能效果【实例代码】 - Web前端
- 深入理解jQuery中的事件冒泡 - Web前端
- jquery实现去除重复字符串的方法小结 - Web前端
- jQuery的promise与deferred对象在异步回调中的作用 - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 9在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


