Frame框架页面加载中进度条的实现

B/S系统中经常会看到页面加载中的进度条图片,尤其是ajax应用中。这种效果在单一页面上很好实现,无非就是生成一个Div层,动态显示出来,等到页面加载完毕再隐藏。或者是动态生成一个Div层,页面加载完毕后删除该层。无论哪种做法,js的定位都是很关键的,单一页面也比较容易做到,可是在frame嵌套的页面中,这样的定位就比较困难了,尤其还要再加一个背景遮罩层,定位和大小取值曲折一些。这里我简单实现了frame中加载条的显示,使用jquery库,因为这样可以省去很多代码,兼容性也好。

1、页面布局

绘图4

点击顶层“菜单A、菜单B”或者左侧“菜单1、菜单2”等,在右侧主页面显示之前,会有loading层,并有遮罩层暂时遮住当前页面。我们要做的就是定位右侧frame中loading层的位置和遮罩层的大小。

2、aspx页面

head中一定要引用jquery文件,如:<script type="text/javascript" src="http://www.cnblogs.com/JS/jquery1.3.2.js"></script>。使用的jquery方法如下:

 1:  $(function() {
 2:          $("img[id='i1']").bind("click", function() {
 3:              var topBody = window.parent.document.body;
 4:              var rightBody = window.parent.frames["rightFrame"].document.body;
 5:              var loadingDiv = $("#loading", rightBody);
 6:              if (loadingDiv.length == 0) {
 7:                  loadingDiv = $("<div id='loading'><img id='loadingImg' src='../images/loadingPage.gif'/></div>");
 8:                  loadingDiv.css("position", "absolute");
 9:                  loadingDiv.css("z-index", "999");
10:                  loadingDiv.css("background-color", "#E0E8FF");
11:  
12:                  loadingBankDiv = $("<div id='bankDiv'></div>");
13:                  loadingBankDiv.width($(rightBody).width());
14:                  loadingBankDiv.height($(topBody).height() - 86 - 30);
15:                  loadingBankDiv.css("position", "absolute");
16:                  loadingBankDiv.css("z-index", "998");
17:                  loadingBankDiv.css("background-color", "#ffffff");
18:                  loadingBankDiv.css("filter", "alpha(opacity=90)");
19:  
20:                  loadingBankDiv.append(loadingDiv);
21:                  $(rightBody).append(loadingBankDiv);
22:  
23:                  loadingBankDiv.css("left", 0);
24:                  loadingBankDiv.css("top", 0);
25:                  loadingDiv.css("left", ($(rightBody).width() - loadingDiv.width()) / 2);
26:                  loadingDiv.css("top", ($(topBody).height() - 86 - 30) / 2);
27:              }
28:          });
29:      });

这里的$("img[id='i1']")使用jquery选择器选出菜单图片,如我的“菜单A、菜单B、…”的id都是“i1”。给他的click事件绑定我们定义的一个方法,该方法就是用来显示页面加载中的层。各位根据自己实际情况修改选择器。

var rightBody = window.parent.frames["rightFrame"].document.body;找到右侧主页面的dom,rightFrame根据个人项目修改。

loadingBankDiv就是遮罩层,将其背景设为白色透明度为90美观一些。关键是他的高度,目前我还没有找到办法直接获取rightFrame的高度,取到的都是当前document的高度,因此我用了比较委婉的方法,即先取到整个顶层框架页面的高度,然后减去顶端菜单栏的高度,再加以修正,得到的值赋给遮罩层,即loadingBankDiv.height($(topBody).height() - 86 - 30);这样看效果还可以。宽度即loadingBankDiv.width($(rightBody).width());

loadingDiv是“页面加载中”图片所在的图层,它的left位置得是rightFrame的宽度一半再减去自身的宽。top设置同loadingBankDiv,也需要换算。

每次生成的loadingBankDiv会在页面加载完成后被实际的rightFrame中的内容冲掉,因此我们需要增加if (loadingDiv.length == 0)的判断。

到此,frame中显示“页面加载中”的效果完成。祝大家顺利实现!

posted @ 2010-04-20 10:57  混世者  阅读(4139)  评论(6编辑  收藏  举报