2009-11-26 108 views
14

我有一個使用PHP發送表單數據的表單。有沒有一種方法可以在頁面上創建一個進度條,使其看起來像是處於操作狀態,以便人們在單擊併發送PHP信息後不會多次單擊該按鈕。HTML PHP進度條

謝謝。

+0

甚至閃存假的進度條,通過點擊激活'發送'按鈕? – 2009-11-26 10:06:26

回答

18

進度條:簡單的文本版本:

<?php 
// Output a 'waiting message' 
echo 'Please wait while this task completes'; 

// Now while waiting for a certain task to 
// complete, keep outputting .'s 

while (true) { 
    // Echo an extra dot, and flush the buffers 
    // to ensure it gets displayed. 
    echo ' .'; 
    flush(); 

    // Now sleep for 1 second and check again: 
    sleep(1); 
} 
?> 

進度條:基於PHP(grphical):

<?php 
// A function that will create the initial setup 
// for the progress bar: You can modify this to 
// your liking for visual purposes: 
function create_progress() { 
    // First create our basic CSS that will control 
    // the look of this bar: 
    echo " 
<style> 
#text { 
    position: absolute; 
    top: 100px; 
    left: 50%; 
    margin: 0px 0px 0px -150px; 
    font-size: 18px; 
    text-align: center; 
    width: 300px; 
} 
    #barbox_a { 
    position: absolute; 
    top: 130px; 
    left: 50%; 
    margin: 0px 0px 0px -160px; 
    width: 304px; 
    height: 24px; 
    background-color: black; 
} 
.per { 
    position: absolute; 
    top: 130px; 
    font-size: 18px; 
    left: 50%; 
    margin: 1px 0px 0px 150px; 
    background-color: #FFFFFF; 
} 

.bar { 
    position: absolute; 
    top: 132px; 
    left: 50%; 
    margin: 0px 0px 0px -158px; 
    width: 0px; 
    height: 20px; 
    background-color: #0099FF; 
} 

.blank { 
    background-color: white; 
    width: 300px; 
} 
</style> 
"; 

    // Now output the basic, initial, XHTML that 
    // will be overwritten later: 
    echo " 
<div id='text'>Script Progress</div> 
<div id='barbox_a'></div> 
<div class='bar blank'></div> 
<div class='per'>0%</div> 
"; 

    // Ensure that this gets to the screen 
    // immediately: 
    flush(); 
} 

// A function that you can pass a percentage as 
// a whole number and it will generate the 
// appropriate new div's to overlay the 
// current ones: 

function update_progress($percent) { 
    // First let's recreate the percent with 
    // the new one: 
    echo "<div class='per'>{$percent} 
    %</div>\n"; 

    // Now, output a new 'bar', forcing its width 
    // to 3 times the percent, since we have 
    // defined the percent bar to be at 
    // 300 pixels wide. 
    echo "<div class='bar' style='width: ", 
    $percent * 3, "px'></div>\n"; 

    // Now, again, force this to be 
    // immediately displayed: 
    flush(); 
} 

// Ok, now to use this, first create the 
// initial bar info: 
create_progress(); 

// Now, let's simulate doing some various 
// amounts of work, and updating the progress 
// bar as we go. The usleep commands will 
// simulate multiple lines of code 
// being executed. 
usleep(350000); 
update_progress(7); 
usleep(1550000); 
update_progress(28); 
usleep(1000000); 
update_progress(48); 
usleep(1000000); 
update_progress(68); 
usleep(150000); 
update_progress(71); 
usleep(150000); 
update_progress(74); 
usleep(150000); 
update_progress(77); 
usleep(1150000); 
update_progress(100); 

// Now that you are done, you could also 
// choose to output whatever final text that 
// you might wish to, and/or to redirect 
// the user to another page. 
?> 
上的網頁內容
3

進度條是很難得到正確的,因爲你不知道知道該流程需要花費的總時間,並且您沒有進程指示器來告訴您何時更新您的欄。使用像ajaxload.com可用的旋轉加載圖像可能會更好。

您可以使隱藏的div覆蓋整個頁面,並在等待時激活JavaScript中的div。

在你的HTML:

#wait { 
    position:fixed; 
    top:50%; 
    left:50%; 
    background-color:#dbf4f7; 
    background-image:url('/images/wait.gif'); // path to your wait image 
    background-repeat:no-repeat; 
    z-index:100; // so this shows over the rest of your content 

    /* alpha settings for browsers */ 
    opacity: 0.9; 
    filter: alpha(opacity=90); 
    -moz-opacity: 0.9; 
} 

然後在你的JavaScript:

<div style="display:none;" id="wait"></div> 
在CSS

... 
$("#wait").show(); // when you want to show the wait image 
... 
$("#wait").hide(); // when your process is done or don't worry about it if the page is refreshing