2011-08-05 26 views
0

概述:我需要一個可以從插入的數字向上計數的計數器,可以在沒有用戶的情況下保持計數,並且可以在網站中直觀顯示計數。在我離開這裏的時候,我會努力解決這個問題。任何幫助,將不勝感激。我計劃將它打包成Joomla模塊,並在不久的將來免費發佈。PHP/JavaScript定時器和計數器

輸入是:

  • 起始量間隔以秒更新,爲每個 間隔

PHP類添加用於建立定時器

class Counter { 
    var $baserate; 
    var $rate; 
    var $start; 
    var $seconds; 
    var $now; 
    var $month; 
    var $day; 
    var $year; 
    var $saving; 
    var $growthrate; 

    function Counter($rate, $baserate,$seconds,$year,$day,$month) 
    { 
     $this->rate = $rate; 
     $this->base = $baserate; 
    $this->seconds = $seconds; 
    $this->year = $year; 
    $this->day = $day; 
    $this->month= $month; 
    $this->carbonsaving(); 
    } 

    function carbonsaving() 
    { 
    $now = time(); 
    $start = mktime(0,0,0,$this->month,$this->day,$this->year); 
    $growthrate = $this->rate * (60/$this->seconds); 
     $saving = round(((($now - $start) * $growthrate) + $this->base)); 
    return $saving; 
     } 

} 
$count1 = new Counter(0,1, 2,2011,4,8); 
$count2 = new Counter(15,1, 1,2011,1,8); 
$width = 300; 
$height = 350; 
?> 

Javascript在網頁上設置更新間隔並調用初始值的函數。 這些似乎並沒有保持同步,現在

var car1 = <?php print($count1->carbonsaving()); ?>; 
var car2 = <?php print($count1->carbonsaving()); ?>; 
function incs1() 
{ 
car1 = car1 + <?php print($count1->rate);?> ; 
document.getElementById("carb1").innerHTML=car1; 
} 
function incs2() 
{ 
car2 = car2 + <?php print($count2->rate);?> ; 
document.getElementById("carb2").innerHTML=car2; 
} 
setInterval('incs1()', <?php print($count1->seconds);?> *1000); 
setInterval('incs2()', <?php print($count2->seconds);?> *1000); 

最後,計時器部分。我想擺脫加載,並將onpageload事件添加到主體以確保頁面加載後立即加載數字(而不是等待間隔)。

<span id="carb1">Loading...</span><br /> 
<span id="carb2">Loading...</span><br /> 
<span id="carb3">Loading...</span> 

當前的腳本: 目前的憑證是由創建每個頁面上的三個計數器的對象的類運行。目前該櫃檯遇到一些問題。

  1. 計數和間隔不同步。也就是說,可視網站上腳本的刷新間隔與腳本內的計數不同步。我的邏輯必須在某個時候關閉。

  2. 輸入數字開始的問題。我還沒有添加這個功能。有誰知道有一個簡單的方法讓輸入數字進入腳本併爲此程序創建正確的開始時間嗎?

+0

你可以使用'<?=',而不是'<?PHP print' –

+0

你怎麼樣儘量根據重新計算時間的JavaScript函數內部,並在較短的時間間隔該功能運行。我認爲依靠javascript時序的準確性是行不通的。但是如果您基於當前時間戳重新計算。可能會同步。 –

回答

1

所以這是我的數學。它的工作現在。

function carbonsaving() 
{ 
    $now = time(); 
    $start = mktime(0,0,0,$this->month,$this->day,$this->year); 
    $growthrate = ($this->rate/$this->seconds) ; 
     $saving = round(((($now - $start) * $growthrate)+$this->base)); 
    return $saving; 
}