一、先引入jquery和jquery-ui的js,例子以下:javascript
<link href="JqueryUI/jquery-ui.css" rel="stylesheet" />
<script src="Scripts/jquery-1.8.2.js"></script>
<script src="JqueryUI/jquery-ui.js"></script>css
可使用div來做爲顯示進度條的載體:html
<div id="divProgressbar"></div>java
將上面的div變成進度條:jquery
<script type="text/javascript">ajax
$(function(){bootstrap
$("#divProgressbar").progressbar({value: 30}); //初始話進度條並設置初始值爲30app
alert("當前值是: " + $("#divProgressbar").progressbar("option","value")); //讀取進度條的當前值異步
});async
</script>
一運行例子就明白
3、 要進度條動起來怎麼辦?
作個小實驗,修改jquery代碼以下:
<script type="text/javascript">
$(function(){
$("#divProgressbar").progressbar({value: 30});
alert("當前值是: " + $("#divProgressbar").progressbar("option", "value"));
$("#divProgressbar").progressbar({value: 60});
alert("當前值是: " + $("#divProgressbar").progressbar("option", "value"));
$("#divProgressbar").progressbar({value: 90});
alert("當前值是: " + $("#divProgressbar").progressbar("option", "value"));
});
</script>
運行,看是什麼結果,進度條沒變化,每次彈出框的值都是30吧!爲何捏?由於.progressbar({value: 30})是用來初始化的上面已經在代碼的註釋裏提到,在dialog那篇裏也說到同一個控件是不容許被屢次初始化的,因此咱們必須用其它的方法來修改進度條的當前值,jQuery提供了.progressbar("option", "value", 60)方法來設置當前值,這裏還能夠發現,不在後面加數值參數的話就是讀取當前值。
再修改代碼以下:
<script type="text/javascript">
$(function(){
$("#divProgressbar").progressbar({value: 30});
alert("當前值是: " + $("#divProgressbar").progressbar("option", "value"));
$("#divProgressbar").progressbar("option", "value", 60);
alert("當前值是: " + $("#divProgressbar").progressbar("option", "value"));
$("#divProgressbar").progressbar("option", "value", 90);
alert("當前值是: " + $("#divProgressbar").progressbar("option", "value"));
});
</script>
嘿嘿——進度條動起來了,並且彈出框的值也變化了。
4、 能夠實用的進度條
修改代碼以下:
<script type="text/javascript">
$(function(){
updateProgressbarValue(); //調用函數
function updateProgressbarValue(){
$("#divProgressbar").progressbar({value: 0}); //初始化進度條,若是已經初始化則會跳過
var newValue = $("#divProgressbar").progressbar("option", "value") + 3; //讀取進度條現有值並計算出新值
$("#divProgressbar").progressbar("option", "value", newValue); //設置進度條新值
setTimeout(updateProgressbarValue, 500); //使用setTimeout函數延遲調用updateProgressbarValue函數,延遲時間爲500毫秒
}
});
</script>
這裏最重要的是使用了setTimeout來延遲調用函數,而且這是一個自嵌套函數,若是沒有終止它的話它將一直運行下去,這是不被容許的。
在setTimeout(updateProgressbarValue, 500);前加入下面的代碼就知道了:
alert(newValue);
5、 在適當的地方終止這個傻頭傻腦的程序
其實咱們只須要在setTimeout(updateProgressbarValue, 500);前加一個判斷就ok了:
if(newValue <= 100)setTimeout(updateProgressbarValue, 10);
這樣咱們就能夠在進度條滿了後終止這個傻瓜繼續執行。
最終代碼以下:
<script type="text/javascript">
$(function(){
updateProgressbarValue();
function updateProgressbarValue(){
$("#divProgressbar").progressbar({value: 0});
var newValue = $("#divProgressbar").progressbar("option", "value") + 10;
$("#divProgressbar").progressbar("option", "value", newValue);
alert(newValue);
if(newValue <= 100) setTimeout(updateProgressbarValue, 10);
}
});
</script>
大文件上傳帶進度條的代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadTest2.aspx.cs" Inherits="Html5UploadTest.UploadTest2" %> <html lang="zh-CN"> <head> <meta charset="utf-8"> <title>HTML5大文件分片上傳示例</title> <script src="Scripts/jquery-1.8.2.js"></script> <link href="bootstrap-progressbar/bootstrap-progressbar-3.3.4.css" rel="stylesheet" /> <script src="bootstrap-progressbar/bootstrap-progressbar.js"></script> <%--<link href="JqueryUI/jquery-ui.css" rel="stylesheet" /> <script src="JqueryUI/jquery-ui.js"></script>--%> <script> function uploadFile() { $("#upload").attr("disabled", "disabled"); var file = $("#file")[0].files[0], //文件對象 fileNum = $("#file")[0].files[0].length, name = file.name, //文件名 size = file.size, //總大小 succeed = 0; var shardSize = 2 * 1024 * 1024, //以2MB爲一個分片 shardCount = Math.ceil(size / shardSize); //總片數 $('.progress .progress-bar').attr('data-transitiongoal', 0).progressbar({ display_text: 'fill' }); for (var i = 0; i < shardCount; ++i) { //計算每一片的起始與結束位置 var start = i * shardSize, end = Math.min(size, start + shardSize); //構造一個表單,FormData是HTML5新增的 var form = new FormData(); form.append("data", file.slice(start, end)); //slice方法用於切出文件的一部分 form.append("name", name); form.append("total", shardCount); //總片數 form.append("index", i + 1); //當前是第幾片 //Ajax提交 $.ajax({ url: "Upload.ashx", type: "POST", data: form, async: true, //異步 processData: false, //很重要,告訴jquery不要對form進行處理 contentType: false, //很重要,指定爲false才能造成正確的Content-Type success: function () { ++succeed; $("#output").text(succeed + " / " + shardCount); var percent = ((succeed / shardCount).toFixed(2)) * 100; updateProgress(percent); if (succeed == shardCount) { $("#upload").removeAttr("disabled"); } } }); } } function progress(percent, $element) { var progressBarWidth = percent * $element.width() / 100; $element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% "); } //$(document).ready(function () { // $('.progress .progress-bar').progressbar({ display_text: 'fill' }); //}); function updateProgress(percentage) { $('.progress .progress-bar').attr('data-transitiongoal', percentage).progressbar({ display_text: 'fill' }); } </script> </head> <body> <input type="file" id="file" /> <button id="upload" onclick="uploadFile();">上傳</button> <span id="output" style="font-size: 12px">等待</span> <div class="progress"> <div id="progressBar" class="progress-bar" role="progressbar" data-transitiongoal=""></div> </div> </body> </html>