javascript
  • jquery
  • setinterval
  • 2010-01-02 72 views 2 likes 
    2

    我有一個簡單的系統,刷新每隔幾秒鐘一個div:使用Javascript/jQuery的刷新定時器

    $(document).ready(function() { 
         $("#nownext").load("response.php"); 
         var refreshId = setInterval(function() { 
          $("#nownext").load('response.php?randval='+ Math.random()); 
         }, 20000); 
        }); 
    

    現在,因爲內容是什麼,它更可能在小時更新,或者在半過去。 (雖然不總是)。我希望這樣做會使系統在幾分鐘之前和之後幾分鐘(以及過去一半)之間刷新更多,只是爲了使它更加精確。

    這是可能的/我會怎麼做,而不會強調客戶端的計算機太多?

    回答

    0

    由於時間間隔本身將是動態的,您將不得不使用setTimeout來代替。

    像這樣(未經):

    $(document).ready(function() { 
        $("#nownext").load('response.php?randval='+ Math.random()); 
        var minutes = new Date().getMinutes(), interval = 60*10*1000; // default 10 mins 
        if (minutes <= 10 || (minutes > 30 && minutes < 35) || minutes > 50) { 
         // update once-per-minute if within the first/last 10mins of the hour, or 5mins within the half hour 
         interval = 60*1000; 
        } 
        setTimeout(arguments.callee, interval); 
    }); 
    
    +0

    我同意這一點,但他最初的間隔時間是20秒,他要求在接近半小時的休息時間內頻繁出現。我唯一需要注意的是「拍打你自己」,所以我會添加某種「進行中」狀態變量。 – jpsimons 2010-01-02 18:22:16

    1

    使用的setTimeout,而不是setInterval的,所以你可以動態改變下一個間隔的時間。我不確定在「快速」期間創建和檢查Date()對象的毫秒數會帶來什麼樣的性能影響,但是如果它出現問題,您總是可以將頻率調整到更接近每秒。

    start_timer = function(timing) { 
        var timer, d = new Date(), min = d.getMinutes(), 
        timeout = 20000; /* slow timeout */ 
        if((min >= 28 && min <= 30) || min >= 58) { 
        timeout = 100; /* fast timeout */ 
        } 
        timer = setTimeout(start_timer, timeout); 
        // Call your code here. 
    }; 
    
    $(document).ready(function() { 
        start_timer(); 
    }); 
    
    相關問題