2015-04-23 63 views
1

我有一個ID的數組,我通過Laravel的雄辯回來。jQuery每個 - 每X秒?

例如

[0, 1, 4, 6, 8, 9] 

這些代表ID在表中,然後我使用這些ID調用路由。

/get_single_item/{id} 

我想要的是每隔X秒,在數組中移動並每次調用single_item頁面。

目前這樣的:

$.each(data, function(value) { 
    console.log(value); 
}); 

轉儲出當然一氣呵成所有的值,我怎麼能只得到一個值,每X秒,然後在開始啓動一次回到了盡頭?

+1

看'的setInterval()' –

+0

用遞歸函數和超時 – adeneo

+2

http://jsfiddle.net/19waccxm/ –

回答

3

(修訂答案)

這是相當簡單其實做起來的一種方式:

  • 保持當前索引變量
  • 使用setInterval()遞增並夾緊變量並使用相應的數組元素

var array = [0, 1, 4, 6, 8, 9], current = -1; 
 
setInterval(function() { 
 
    current += 1; 
 
    current %= array.length; 
 
    console.log("callback for item #" + current + " whose value is " + array[current]); 
 
}, 2000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<!-- nothing here, look at browser console -->

+0

非常好,非常感謝! – Lovelock

+0

@Salman酷,所以我們可以做到沒有每個! –

0

如果你希望它永遠打印這是一個遞歸函數:)

function print_every_x_second(list, milliseconds) { 
    // Get the first value and remove it from array 
    var value = list.shift(); 
    console.log(value); 
    // Put it back at the end. 
    list.push(value); 
    setTimeout('print_every_x_second(list, milliseconds)', milliseconds); 
} 
var list = [0, 1, 4, 6, 8, 9]; 
var milliseconds = 300; 
print_every_x_second(list, milliseconds); 
0

隊列運行

我做了一個小庫來運行在一組功能具體的隊列,

你可以在這裏使用它爲您的特定情況下,以下內容:

使用

var arr = [1,2,3,4], i = 0; 

var fn = function() { 
// your business logic is separated from the iteration logic 
if(i === arr.length) return; 
console.log(arr[i++]); 
}; 

// execute the queue every 1 second 
queue([fn], 1000, /* repeat */ true)(); 

庫:

var queue = function(fn,timeout,repeat){ 
    return function(){ 
     var i = 0, f = fn[i], t = setInterval(function(){ 
      f(); 
      if(fn[i+1] !== undefined){ 
       f = fn[++i]; 
      }else{ 
       if(repeat){ 
        i=0; 
        f = fn[i]; 
       }else{ 
        clearInterval(t); 
       } 
      } 
     }, timeout); 
    } 
}