在网页上常常遇到须要等待非常久的操作,比方导出报表等。为了预防用户点击其它操作或者多次点击同个功能,须要用遮罩层把页面或者操作区盖住。防止用户进行下一步操作。同一时候能够提高界面友好度,让用户知道操作正在运行。

  1. $.fn.extend({
  2. /**
  3. * 给元素加入遮罩层
  4. * @param message {String} [可选]遮罩层显示内容
  5. */
  6. mask: function (message) {
  7. var $target = this,
  8. fixed = false,
  9. targetStatic = true;
  10.  
  11. if (Object.prototype.toString.call(message) !== '[object String]' || !message) {
  12. //假设message为空或者不是字符串,则用默认的消息提示。
  13.  
  14. message = '请稍候。
  15.  
  16. 。。';
  17. }
  18.  
  19. if ($target.length === 0) {
  20. $target = $('body');
  21. } else {
  22. if ($target.length > 1) {
  23. $target = $target.first();
  24. }
  25.  
  26. if ($target[0] === window || $target[0] === document) {
  27. $target = $('body');
  28. }
  29. }
  30.  
  31. if($target[0] === document.body){
  32. fixed = true;
  33. }
  34.  
  35. //假设目标元素已经有遮罩层,获取遮罩层
  36. var old = $target.data('rhui.mask');
  37. if (old) {
  38. old.$content.html(message);
  39. center($target, old.$content, fixed);
  40. return;
  41. }
  42.  
  43. //假设被遮盖的元素是static。把元素改成relative
  44. if ($target.css('position') === 'static') {
  45. targetStatic = true;
  46. $target.css('position', 'relative');
  47. }
  48.  
  49. var $content, $overlay;
  50. if (fixed) {
  51. $overlay = $('<div class="rhui-mask" style="position:fixed;"></div>');
  52. $content = $('<div class="rhui-mask-content" style="position:fixed;">' + message + '</div>');
  53. } else {
  54. $overlay = $('<div class="rhui-mask"></div>');
  55. $content = $('<div class="rhui-mask-content">' + message + '</div>');
  56. }
  57.  
  58. $overlay.appendTo($target);
  59. $content.appendTo($target);
  60.  
  61. //显示遮罩层
  62. $overlay.show();
  63. $content.show();
  64.  
  65. //让遮罩层居中
  66. center($target, $content, fixed);
  67.  
  68. //把遮罩层信息加入到$target
  69. $target.data('rhui.mask', {
  70. fixed: fixed,
  71. $overlay: $overlay,
  72. $content: $content,
  73. targetStatic: targetStatic
  74. });
  75.  
  76. /**
  77. * 让遮罩层内容居中显示
  78. * @param $target 被遮盖的元素
  79. * @param $content 遮罩层内容元素
  80. * @param fixed 遮罩层是否固定显示
  81. */
  82. function center($target, $content, fixed) {
  83. var $window,
  84. height = $content.outerHeight(true),
  85. width = $content.outerWidth(true);
  86.  
  87. if (fixed) {
  88. //假设遮罩层固定显示。让遮罩层在window居中
  89. $window = $(window);
  90. $content.css({
  91. left: ($window.width() - width) / 2,
  92. top: ($window.height() - height) / 2
  93. });
  94. } else {
  95. //让遮罩层在$target中居中
  96. $content.css({
  97. left: ($target.width() - width) / 2,
  98. top: ($target.height() - height) / 2
  99. });
  100. }
  101. }
  102. },
  103.  
  104. /**
  105. * 取消遮罩层
  106. */
  107. unmask: function () {
  108. var $target;
  109.  
  110. if (this.length === 0) {
  111. $target = $('body');
  112. } else {
  113. $target = this.first();
  114. if ($target[0] === window || $target[0] === document) {
  115. $target = $('body');
  116. }
  117. }
  118.  
  119. var data = $target.data('rhui.mask');
  120. if (!data) {
  121. return;
  122. }
  123.  
  124. //还原目标元素的position属性
  125. if (data.targetStatic) {
  126. $target.css('position', 'static');
  127. }
  128.  
  129. data.$overlay.remove();
  130. data.$content.remove();
  131.  
  132. $target.removeData('rhui.mask');
  133. }
  134. });

插件样式由rhui-mask和rhui-mask-content类控制,rhui-mask是遮罩层样式,rhui-mask-content是遮罩层的提示内容样式。

  1. /* 遮罩层样式 */
  2. .rhui-mask {
  3. position: absolute;
  4. top: 0;
  5. right: 0;
  6. bottom: 0;
  7. left: 0;
  8. z-index: 9000;
  9. display: block;
  10. margin: 0;
  11. padding: 0;
  12. border-style: none;
  13. background-color: #777;
  14. opacity: 0.3;
  15. zoom: 1;
  16. filter: alpha(opacity=30);
  17. }
  18.  
  19. /* 遮罩层显示内容样式 */
  20. .rhui-mask-content {
  21. position: absolute;
  22. z-index: 9999;
  23. display: block;
  24. margin: 0;
  25. padding: 15px 20px;
  26. border: 2px solid rgb(109, 157, 215);
  27. background-color: #fff;
  28. color: blue;
  29. letter-spacing: 2px;
  30. font-weight: bold;
  31. font-size: 15px;
  32. cursor: wait;
  33. }

效果如图所看到的

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

页面调用完整代码

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <title>网页遮罩层的实现</title>
  7. <style type="text/css">
  8. /* 遮罩层样式 */
  9. .rhui-mask {
  10. position: absolute;
  11. top: 0;
  12. right: 0;
  13. bottom: 0;
  14. left: 0;
  15. z-index: 9000;
  16. display: block;
  17. margin: 0;
  18. padding: 0;
  19. border-style: none;
  20. background-color: #777;
  21. opacity: 0.3;
  22. zoom: 1;
  23. filter: alpha(opacity=30);
  24. }
  25.  
  26. /* 遮罩层显示内容样式 */
  27. .rhui-mask-content {
  28. position: absolute;
  29. z-index: 9999;
  30. display: block;
  31. margin: 0;
  32. padding: 15px 20px;
  33. border: 2px solid rgb(109, 157, 215);
  34. background-color: #fff;
  35. color: blue;
  36. letter-spacing: 2px;
  37. font-weight: bold;
  38. font-size: 15px;
  39. cursor: wait;
  40. }
  41. </style>
  42. <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.3/jquery.js"></script>
  43. <script type="text/javascript">
  44. $.fn.extend({
  45. /**
  46. * 给元素加入遮罩层
  47. * @param message {String} [可选]遮罩层显示内容
  48. */
  49. mask: function (message) {
  50. var $target = this,
  51. fixed = false,
  52. targetStatic = true;
  53.  
  54. if (Object.prototype.toString.call(message) !== '[object String]' || !message) {
  55. //假设message为空或者不是字符串,则用默认的消息提示。
  56. message = '请稍候。
  57.  
  58. 。。';
  59. }
  60.  
  61. if ($target.length === 0) {
  62. $target = $('body');
  63. } else {
  64. if ($target.length > 1) {
  65. $target = $target.first();
  66. }
  67.  
  68. if ($target[0] === window || $target[0] === document) {
  69. $target = $('body');
  70. }
  71. }
  72.  
  73. if ($target[0] === document.body) {
  74. fixed = true;
  75. }
  76.  
  77. //假设目标元素已经有遮罩层,获取遮罩层
  78. var old = $target.data('rhui.mask');
  79. if (old) {
  80. old.$content.html(message);
  81. center($target, old.$content, fixed);
  82. return;
  83. }
  84.  
  85. //假设被遮盖的元素是static,把元素改成relative
  86. if ($target.css('position') === 'static') {
  87. targetStatic = true;
  88. $target.css('position', 'relative');
  89. }
  90.  
  91. var $content, $overlay;
  92. if (fixed) {
  93. $overlay = $('<div class="rhui-mask" style="position:fixed;"></div>');
  94. $content = $('<div class="rhui-mask-content" style="position:fixed;">' + message + '</div>');
  95. } else {
  96. $overlay = $('<div class="rhui-mask"></div>');
  97. $content = $('<div class="rhui-mask-content">' + message + '</div>');
  98. }
  99.  
  100. $overlay.appendTo($target);
  101. $content.appendTo($target);
  102.  
  103. //显示遮罩层
  104. $overlay.show();
  105. $content.show();
  106.  
  107. //让遮罩层居中
  108. center($target, $content, fixed);
  109.  
  110. //把遮罩层信息加入到$target
  111. $target.data('rhui.mask', {
  112. fixed: fixed,
  113. $overlay: $overlay,
  114. $content: $content,
  115. targetStatic: targetStatic
  116. });
  117.  
  118. /**
  119. * 让遮罩层内容居中显示
  120. * @param $target 被遮盖的元素
  121. * @param $content 遮罩层内容元素
  122. * @param fixed 遮罩层是否固定显示
  123. */
  124. function center($target, $content, fixed) {
  125. var $window,
  126. height = $content.outerHeight(true),
  127. width = $content.outerWidth(true);
  128.  
  129. if (fixed) {
  130. //假设遮罩层固定显示,让遮罩层在window居中
  131. $window = $(window);
  132. $content.css({
  133. left: ($window.width() - width) / 2,
  134. top: ($window.height() - height) / 2
  135. });
  136. } else {
  137. //让遮罩层在$target中居中
  138. $content.css({
  139. left: ($target.width() - width) / 2,
  140. top: ($target.height() - height) / 2
  141. });
  142. }
  143. }
  144. },
  145.  
  146. /**
  147. * 取消遮罩层
  148. */
  149. unmask: function () {
  150. var $target;
  151.  
  152. if (this.length === 0) {
  153. $target = $('body');
  154. } else {
  155. $target = this.first();
  156. if ($target[0] === window || $target[0] === document) {
  157. $target = $('body');
  158. }
  159. }
  160.  
  161. var data = $target.data('rhui.mask');
  162. if (!data) {
  163. return;
  164. }
  165.  
  166. //还原目标元素的position属性
  167. if (data.targetStatic) {
  168. $target.css('position', 'static');
  169. }
  170.  
  171. data.$overlay.remove();
  172. data.$content.remove();
  173.  
  174. $target.removeData('rhui.mask');
  175. }
  176. });
  177. </script>
  178. </head>
  179.  
  180. <body>
  181. <div id="div" style="width:600px;height:300px;margin:10px;border:1px solid red;"></div>
  182.  
  183. <script type="text/javascript">
  184. $(function () {
  185. //遮盖整个页面
  186. //仅仅要对window、document和body使用遮罩层。都会遮盖整个页面
  187. //$(window).mask();
  188. //$(window).unmask(); 取消遮罩
  189.  
  190. //遮盖div
  191. $('#div').mask('载入中,请稍候。。
  192.  
  193. ');
  194. });
  195. </script>
  196. </body>
  197.  
  198. </html>

jQuery遮罩层插件的更多相关文章

  1. jQuery遮罩层登录对话框

    用户登录是许多网站必备的功能.有一种方式就是不管在网站的哪个页面,点击登录按钮就会弹出一个遮罩层,显示用户登录的对话框.这用方式比较灵活方便.而现在扫描二维码登录的方式也是很常见,例如QQ.微信.百度 ...

  2. jQuery遮罩层的实现

    遮罩层其实就是一个占据整个页面的半透明效果的页面元素,一般用div实现.页面中实现遮罩层,无非就是为了让用户只能操作弹出窗口的内容,而不允许操作弹出窗口外的内容. 在实现时,我使用了两个div,一个遮 ...

  3. jquery 遮罩层显示img

    如果点击iframe中的image显示整个页面的遮罩层,可参考如下: http://blog.csdn.net/shiaijuan1/article/details/70160714 具体思路就是,顶 ...

  4. jquery遮罩层

    (function () { //遮罩层实现 zhe zhao ceng kexb 2016.2.24 $.extend($.fn, { mask: function (msg, maskDivCla ...

  5. jQuery遮罩层效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. JQuery 遮罩层弹窗

    var str = "<div id=\"zhezhao\" style=\"display:none; background-color: rgba(0 ...

  7. jquery 遮罩层指定位置

    .css .datagrid-mask-msg { position: absolute; top: %; margin-top: -20px; padding: 12px 5px 10px 30px ...

  8. Jquery实现遮罩层,就是弹出DIV周围都灰色不能操作

    <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC & ...

  9. jquery实现div遮罩层

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 【译】Asp.Net Identity Cookies 格式化

    原文出处 Trailmax Tech Max Vasilyev: ASP.Net MVC development in Aberdeen, Scotland 中英对照版 我的读者联系到我,并向我提出了 ...

  2. Mybatis主配置文件常见使用讲解

    在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件. 其实最后mybatis解析的还是一个主配置文件. 而映射文件会通过我们配置<mappers>属性,或 ...

  3. http下载网页

    //http.c #include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ ...

  4. linux操作系统基础篇(七)

    Linux服务篇(二) 1.nfs服务的搭建 安装: yum install rpcbind nfs-utils -y 配置: NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要 ...

  5. git学习之创建版本库

    创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...

  6. shiro入门示例

    一.pom引入maven依赖 <dependencies> <dependency> <groupId>junit</groupId> <arti ...

  7. 《java.util.concurrent 包源码阅读》04 ConcurrentMap

    Java集合框架中的Map类型的数据结构是非线程安全,在多线程环境中使用时需要手动进行线程同步.因此在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:Concu ...

  8. PHP启动:动态库加载失败(PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/*.so')

    今天在linux上面智障一般搞了好久,本来想安装个swoole的,然后用  php -m 的命令想看下安装的PHP扩展库,发现有的扩展库有的可以出来,有的加载失败, 加载失败的错误类型: PHP Wa ...

  9. e2e测试之Nightmare

    一.e2e测试简介 e2e或者端到端(end-to-end)或者UI测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样.简而言之,它从一个用户的角度出发,认为整个系统都是一个 ...

  10. python并发编程之多进程一

    一,什么是进程 进程是操作系统结构的基础:是一个正在执行的程序:计算机中正在运行的程序实例:可以分配给处理器并由处理器执行的一个实体: 二,进程与程序的区别 进程即运行中的程序,从中即可知,进程是在运 ...