`
varsoft
  • 浏览: 2438864 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

WEB应用程序中的进度条

阅读更多

WEB应用程序中的进度条

Julien Cheyssial 写作于2003/10/01

Joise.LI翻译并修改于2004-4-2

写在前面:

原文是我在需要使用进度条时找到的一篇文章,讲解详细并附有实例。我在原文的基础上加上了自己的修改:增加了线程处理并且将进度条的使用放到了子线程中处理。这是我第一次翻译文章,敬请各位指正。原文见于http://www.myblogroll.com/Articles/progressbar/,请对照参考。

谁说在WEB应用程序中不能使用进度条?我认为能。本文将介绍在服务端长时间的处理过程中通过使用进度条提高WEB应用程序的质量和界面友好度。事实上,如果一个WEB应用程序一直运行在无状态和无连接状态下,用户很容易认为事情已经结束了。但是本文介绍的不使用任何ActiveX控件和乱七八糟的Java Applets的进度条将有助于改善这点。

在一个WEB应用程序中能够使用进度条的关键是浏览器有能力在所有页面加载完之前显示页面。我们将使用这点特性来有步骤的生成并且发送页面给客户端。首先,我们将使用HTML生成一个完美并且漂亮的进度条,然后我们动态的发送Javascript块以更新进度条。当然,以上的所有内容都是在断开用户请求之前实现的。在C#中,Response.Write允许我们加入自定义内容到缓存区并且Response.Fluse()允许我们把所有缓存区中的内容发送到用户的浏览器上。

第一步:

第一步让我们来建立一个进度条页面,我们使用progressbar.aspx如上所述,我们逐步生成并发送页面到客户端。首先,我们将使用HTML生成一个完美并且漂亮的进度条。所需要的HTML代码我们可以从事先定义的progressbar.htm中获取,所以,第一件事情是装载它并且将数据流发送到客户端的浏览器,在progressbar.aspxPage_Load中加入如下几行:

string strFileName = Path.Combine( Server.MapPath("./include"), "progressbar.htm" );

StreamReader sr = new StreamReader( strFileName, System.Text.Encoding.Default );

string strHtml = sr.ReadToEnd();

Response.Write( strHtml );

sr.Close();

Response.Flush();

以下是progressbar.htmHTML代码,(译注:作者把脚本函数放在了另外一个js文件中,但我嫌麻烦就也放在了这个静态页面中了)

<script language="javascript">

function setPgb(pgbID, pgbValue)

{

if ( pgbValue <= 100 )

{

if (lblObj = document.getElementById(pgbID+'_label'))

{

lblObj.innerHTML = pgbValue + '%'; // change the label value

}

if ( pgbObj = document.getElementById(pgbID) )

{

var divChild = pgbObj.children[0];

pgbObj.children[0].style.width = pgbValue + "%";

}

window.status = "数据读取" + pgbValue + "%,请稍候...";

}

if ( pgbValue == 100 )

window.status = "数据读取已经完成";

}

</script>

<html>

<head>

<link rel="stylesheet" type="text/css" href="style/common.css" />

</head>

<body bgColor="buttonface" topmargin="0" leftmargin="0">

<table width="100%" height="100%" ID="Table1">

<tr>

<td align="center" valign="middle">

<DIV class="bi-loading-status" id="proBar" style="DISPLAY: ; LEFT: 425px; TOP: 278px">

<DIV class="text" id="pgbMain_label" align="left"></DIV>

<DIV class="progress-bar" id="pgbMain" align="left">

<DIV STYLE="WIDTH:10%"></DIV>

</DIV>

</DIV>

</td>

</tr>

</table>

</body>

</html>

对应的CSS定义如下:

.bi-loading-status {

/*position: absolute;*/

width: 150px;

padding: 1px;

overflow: hidden;

}

.bi-loading-status .text {

white-space: nowrap;

overflow: hidden;

width: 100%;

text-overflow: ellipsis;

padding: 1px;

}

.bi-loading-status .progress-bar {

border: 1px solid ThreeDShadow;

background: window;

height: 10px;

width: 100%;

padding: 1px;

overflow: hidden;

}

.bi-loading-status .progress-bar div {

background: Highlight;

overflow: hidden;

height: 100%;

filter: Alpha(Opacity=0, FinishOpacity=100, Style=1, StartX=0, StartY=0, FinishX=100, FinishY=0);

}

第二步:

现在我们可以开始更新进度条了,这是十分重要的部分,因为这部分可以令你的进度条活起来。(译注,原来是使用随机的增加15次直到加载完毕,本文仅使用从1-100的匀速增加,以下内容非译)

首先我们新开一个线程,在Page_Load 中加入以下代码:

Thread thread = new Thread( new ThreadStart(ThreadProc) );

thread.Start();

thread.Join();

在类中增加以下函数:

private void ThreadProc()

{

string strScript = "<script>setPgb('pgbMain','{0}');</script>";

for ( int i = 0; i <= 100; i++ )

{

System.Threading.Thread.Sleep(10);

Response.Write( string.Format( strScript, i ) );

Response.Flush();

}

}

注意,在以上代码中我们使用for循环,在i每增加一次的情况下往客户端发送一段脚本<script>setPgb('pgbMain','{0}');</script>其中的{0}会被相应的i替换,而该段脚本会调用预先写好的javascript函数setPgb更改页面的进度条状态。

分享到:
评论

相关推荐

    ExtJSWeb应用程序开发指南(第2版)

    第8章 常见Web框架的ExtJS改造 第9章 ExtJS对Ajax的支持 第10章 增强型模板 第11章 数据模型 第12章 Grid组件 第13章 Tree组件 第14章 ExtJS与服务端框架的整合 第15章 主题 第16章 Ext.Direct 第17章 Draw...

    在ASP.NET中显示进度条

    在模板类型中选择ASP.NET Web应用程序;  3.位置里输入:http://localhost/WebPortal;  4.添加新项:名字为ShowProgress的Web窗体。  5.在您的Web窗体ShowProgress.aspx上添加任何其他的

    漂亮的带进度条上传程序

    用flash做的进度条,好用,我在codeproject弄来的,去掉了登录和只能传图片的限制。自己设定大小在web.configer里

    各种各样的读取进度条GIF图片

    十三种各式各样的进度条读取GIF图片,个人觉的还是蛮不错的,用于应用程序和WEB开发,都是很漂亮的。推荐推荐!

    使用AJAX实现Web页面进度条的实例分享

    在应用程序的安装和下载过程中,进度条的使用已经是非常普遍了。进度条可以用来表识项目的完成进度,可以用百分比或数字表示,可以水平放置。利用Ajax技术创建进度条,功能显得更加强大的快捷。 现在创建一个实例,...

    《Ajax应用开发典型实例》

    全书共分为13章,由浅入深、循序渐进地介绍基于Ajax组合查实例、调查程序文例、天气预报实例、会员注册登录验证、股票价格查询、无刷新新闻系统、滚动翻页、上传文件进度条、Ajax调用Web Service应用实例、RSS阅读器...

    Webuploader图片批量上传(C# Asp.Net)

    使用webuploader插件实现图片的批量上传,图片上传时显示进度条,图片上传至文件夹,并且支持将图片路径保存到数据库

    C#电子教案

    第44讲:Web应用程序的调试和异常处理 第45讲:Web应用程序的部署和配置 第46讲:Web应用程序的安全性 第47讲:Web Service介绍 第48讲:Web Service应用 第49讲:ADO.NET概述 第50讲:ADO.NET重要对象 第51讲:SQL ...

    online-judge-mean:一个用于在线判断的 Web 应用程序,使用 MEAN 堆栈(MongoDB、Express、Angular 和 Node.js)构建

    用于在线判断(算法问题)的 Web 应用程序,使用 MEAN 堆栈(MongoDB、Express、Angular 和 Node.js)构建。 功能 此应用程序用于解决算法问题。 您可以提交解决方案以查看它是否通过了所有测试用例。 以下是可用...

    进度条在.net导入Excel时的应用实例

    一、建立一个web应用程序,在程序中首先创建一个html文件命名为ProgressBar,文件内容如下: 代码如下:&lt;html&gt; &lt;head&gt; &lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /&...

    深入浅出Struts2

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。书中概念...

    EggContractor:Egg,Inc.合同监控Web应用程序和CLI客户端

    的自托管合同监视Web应用程序+ CLI客户端。 它使您可以轻松地监视所有合同进度,以及窥视可能想要加入的合作社。 请注意,反向工程API protobuf可在 protobuf上独立获得,因此您可能还会发现此存储库对于构建自己的...

    xel:Xel-用于构建类似本机的Electron和Web应用程序的小部件工具包

    Xel( ) Xel是一个HTML 5小部件工具包,用于构建类似本机的Web , Electron和Hybrid应用程序。 Xel遵循“保持简单”的原则,因此是使用普通的JS,HTML和CSS编写的。 它不使用任何预处理器或繁重的抽象层。 其中的...

    Visual C++ 程序开发范例宝典光盘源码 (第二版)1/7

     1.8 多媒体触摸屏程序应用实例   实例032 采购中心多媒体触摸屏程序   实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例   实例034 不可移动的窗体   实例035 始终在最上面的窗体   ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 6/7

     1.8 多媒体触摸屏程序应用实例   实例032 采购中心多媒体触摸屏程序   实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例   实例034 不可移动的窗体   实例035 始终在最上面的窗体   ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 4/7

     1.8 多媒体触摸屏程序应用实例   实例032 采购中心多媒体触摸屏程序   实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例   实例034 不可移动的窗体   实例035 始终在最上面的窗体   ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 5/7

     1.8 多媒体触摸屏程序应用实例   实例032 采购中心多媒体触摸屏程序   实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例   实例034 不可移动的窗体   实例035 始终在最上面的窗体   ...

    Visual C++ 程序开发范例宝典光盘源码 (第二版) 2/7

     1.8 多媒体触摸屏程序应用实例   实例032 采购中心多媒体触摸屏程序   实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例   实例034 不可移动的窗体   实例035 始终在最上面的窗体   ...

    java应用软件程序设计

    314 第9章 Java Web Service编程 319 实例94 使用DOM的层次模型 320 实例95 使用SAX事件模型 324 实例96 JAXP编程 327 实例97 JDOM编程 331 实例98 简单的SOAP应用 336 实例99 访问SOAP RPC...

    C#程序开发范例宝典(第2版).part08

    实例218 获取应用程序所在目录 305 实例219 得到系统当前目录 306 实例220 在程序中改变当前路径 307 6.5 复制文件 307 实例221 使用FileStream复制大文件 308 实例222 复制文件时显示复制进度 310 实例223 ...

Global site tag (gtag.js) - Google Analytics