JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)

在很多项目中都会涉及到数据加载。数据加载有时可能会是2-3秒,为了给一个友好的提示,一般都会给一个【数据加载中。。。】的提示。今天就做了一个这样的提示框。

先去jQuery官网看看怎么写jQuery插件,然后就开始写了。写下来这么一个插件,稍作优化,就在项目中使用了。下面贴的是我写这个插件时的测试图:

这张图模拟数据加载前提示框的展示,这个表格是一个写在页面上的。蓝色的底纹就是遮罩层。

(function($){
    $.fn.extend({
        /**
         * 打开遮罩,并显示一段文字。
         * @param  {String} msg    [显示的文字]
         * @param  {String} imgsrc [图片的位置]
         * @return {void}
         */
        openMask:function(msg, imgsrc){
//            var loadDiv=$("body").find("._mask_loadDiv");
            var loadDiv=this.find("._mask_loadDiv");
            if(!loadDiv || !loadDiv[0]){    // add Mask
                var loadDiv=$("<div class=‘_mask_loadDiv‘ style=‘position:absolute; z-index:99999; height:40px; background:#FFF; border:1px solid #ACE‘></div>");

                if(!imgsrc){    // 指定默认的图片
                    var scripts=document.getElementsByTagName("script");
                    for(var i=0; i<scripts.length; i++){
                        if(scripts[i].src.indexOf("mask")!=-1){
                            var scriptSrc=scripts[i].src;
                            var uri=scriptSrc.substring(0,scriptSrc.lastIndexOf("/"));
                            imgsrc=uri+"/images/mask_loading.gif";
                        }
                    }
                }

                var contentDiv=$("<div class=‘_mask_content‘ style=‘position:relative;text-align:center;‘ >");
                var fontsize=12;
                //loadDiv的宽度= msg的宽度+img的宽度
                var loadDiv_width=msg.length*fontsize+16+3;
                contentDiv.css("width",loadDiv_width);
                loadDiv.css("width",loadDiv_width);
                if(imgsrc){
                    contentDiv.append("<img src=‘"+imgsrc+"‘ alt=‘"+msg+"‘ style=‘width:16px; height:16px‘>")
                            .append("<span style=‘font-size:"+fontsize+"px; margin-left:2px; vertical-align:text-top‘>"+msg+"</span>");
                }
                this.append(loadDiv.append(contentDiv));
            //    $("body").append(loadDiv.append(contentDiv));
                /*
                loadDiv[0].style.top=this[0].offsetTop+(this[0].offsetHeight-loadDiv[0].offsetHeight)/2;
                loadDiv[0].style.left=this[0].offsetLeft+(this[0].offsetWidth-loadDiv[0].offsetWidth)/2;
                loadDiv[0].style.paddingTop=(loadDiv[0].offsetHeight-contentDiv[0].offsetHeight)/2;
                */
                loadDiv.css("top",this[0].offsetTop+(this[0].offsetHeight-loadDiv[0].offsetHeight)/2);
                loadDiv.css("left",this[0].offsetLeft+(this[0].offsetWidth-loadDiv[0].offsetWidth)/2);
                loadDiv.css("padding-top",(loadDiv[0].offsetHeight-contentDiv[0].offsetHeight)/2);
            }
            loadDiv.css("z-index",99999).css("display","block");
            return this;
        },
        closeMask:function(){
    //        var loadDiv=$("body").find("._mask_loadDiv");
            var loadDiv=this.find("._mask_loadDiv");
            if(loadDiv)
                loadDiv.css("display","none").css("z-index",-99999);
            return this;
        }
    });
})(jQuery);

/*

// 这个是遮罩层里信息展示框,这个会添加到 <body> 或者 target 元素中
<div class="_mask_loadDiv">
    <div class="_mask_content">
        <img src=‘imgsrc‘ alt=‘msg‘ >
        <span>msg</span>
    </div>
</div>

//这个是目标,要在它上显示遮罩层
<div id="target">

</div>

// 只需要下面的代码:
$("#target").openMask("数据加载中。。。");
// 隐藏对话框,只需要:
$("#target").closeMask();

*/

因为涉及到的CSS并不多,就没有遵循HTML、JS、CSS分离的原则,而是将CSS都在这个JS 中写了。

测试页面代码:

<html>
    <head>
        <script type="text/javascript" src="./jquery-mask/jquery-1.7.2.min.js"></script>
        <script type="text/javascript" src="./jquery-mask/jquery.mask.js"></script>
        <script type="text/javascript">
            var helloDiv;
            $(function(){
                var tbl=$("#tableContent");
                for(var i=0; i< 16;i++){
                    tbl.append(‘<tr><td width="25%">hello</td><td width="25%">world</td><td width="25%">jquery</td><td width="22%">mask</td></tr>‘);
                }
                helloDiv=$("#hello");
                helloDiv.openMask(‘数据加载中。。。‘);

            });

            function openMask(){
                helloDiv.openMask("数据加载中。。。。");
            }

            function closeMask(){
                helloDiv.closeMask("数据加载中。。。。");
            }
        </script>
        <body>
            <div id="hello" style="width:300px; height:400px; ">
            <table border="1" width="100%" id="tableContent">
            </table>
            </div>
            <input value="open" type="button" onclick="openMask();"><br>
            <input type="button" value="close" onclick="closeMask();">
        </body>
    </head>
</html>

写这个插件的重点是:计算提示框的位置问题(top, left)、提示框层次问题(z-index)。

要理解这些属性可以看看:CSS位置和布局的相关博客。

源码参见:http://files.cnblogs.com/f1194361820/jquery-mask.zip

时间: 2024-11-10 00:55:45

JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)的相关文章

jquery插件图片延时加载实例详解(转)

jquery插件图片延时加载实例详解 效果预览:http://keleyi.com/keleyi/phtml/image/index.htm 使用方法:1.导入JS插件 <script src="http://keleyi.com/keleyi/pmedia/jquery-1.9.1.min.js" type="text/javascript"></script> <script src="http://keleyi.com/

jQuery插件图片懒加载lazyload

来自XXX的前言: 什么是ImageLazyLoad技术 在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的 交互.尤其是对于高清晰的图片,占的几M的空间.ImageLazyLoad技术就是,当前可见界面的图片是加载进来的,而不可见页面(通过滚动条下拉可 见)中的图片是不加载的,这样势必会引起速度上质的提升. 实现原理: 当图片滚动到可视区时将图片加载进来. 图片不在可视区判断: (一):图片距离页面顶端的高度 大于 窗口可视区的高度+window滚动条的scrollTop. (二

提交数据加载中缓冲提示

$('#healthResultCorrelationCompanyAddForm').form('submit', { onSubmit: function () { $.messager.progress({ title: '提示', msg: '数据提交中,请稍候……', text: '' }); return true; }, url: '<%=basePath%>xyData/health/addCorrelationCompany.do', success: function (d

APP中数据加载的6种方式-b

我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的内容有明确的预期呢? 设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数

iOS APP中数据加载的6种方式

我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的内容有明确的预期呢? 设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数

(一)jQuery EasyUI 的EasyLoader加载原理

1.第一次看了官网的demo,引用的是EasyLoader.js文件,而不是引用jquery.easyui.min.js文件,我就有疑问了,百度一下. jQuery EasyUI是一款基于JQuery的UI快速搭建组件.EasyLoader是可以动态加载脚本和CSS文件,也可以动态加载EasyUI已有组件,需要引用EasyLoader.js文件,注意:这里就不需要引用jquery.easyui.min.js文件了. 比如需要加载linkbutton组件,则可以用下面的两种方式来加载: 第一种通过

一个mui扩展插件mui.showLoading加载框【转】

转:http://ask.dcloud.net.cn/article/12856 写在前面:好像mui目前dialog系列唯独缺少showLoading加载框(加载中)组件,为了统一组件样式和体验,写了这么一个扩展插件.CSS和JS代码耦合性应该还是较低的,不妥之处欢迎指教!优点:可以同时兼容Html5和plus,不必为不同环境单独分别Loading组件.缺点:在页面嵌套情况下,遮罩仅对当前页面起作用. 使用方法:显示加载框: mui.showLoading("正在加载..",&quo

[转]6种常见的数据加载模式设计

原文链接:http://elya.cc/2014/03/31/loading/ 设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的

listview的数据加载

效果如图: listview的数据加载,主要用了Scroll监听来判断其位置是否需要加载信息,如果需要加载信息就先显示加载数据的view,然后进行数据的加载,加载完成后,设加载数据的view不可见,如果加载数据的时候数据位null,这时就移除这个view. listView.addFooterView(moreView); // 添加底部view(上图中的数据加载中...),一定要在setAdapter之前添加,否则会报错. listView.removeFooterView(moreView)