2010-12-23 3 views
2

javascript/jquery를 사용하여 다음 작업을 수행 할 수 있습니까? 어레이 만 1 개 기능을 가지고있는 경우, 사용자가 10시 0분 0초배열의 setInterval

function 1 - 10:00:00 
function 1 - 10:00:01 
function 1 - 10:00:02 
function 1 - 10:00:03 
function 1 - 10:00:04 

후 사용자가 클릭하는 경우에 웹 페이지를 여는 경우에, 다음을 수행한다 함수명의 배열하여 setInterval을 사용

다른 버튼은 새로운 기능의 이름은 일을 끝 배열에 추가됩니다 다음 사용자가 버튼에게 3 시간을 클릭

function 1 - 10:00:05 
function 2 - 10:00:06 
function 1 - 10:00:07 
function 2 - 10:00:08 
function 1 - 10:00:09 
function 2 - 10:00:10 
function 1 - 10:00:11 
function 2 - 10:00:12 
function 1 - 10:00:13 

경우 새 함수 이름이 끝나는 배열에 추가됩니다 다음을 수행 :

function 1 - 10:00:14 
function 2 - 10:00:15 
function 3 - 10:00:16 
function 1 - 10:00:17 
function 2 - 10:00:18 
function 3 - 10:00:19 
function 1 - 10:00:20 
function 2 - 10:00:21 
function 3 - 10:00:22 

이것이 가능합니까? 그것이 가능하다면, 누군가이 일이 일어날 수있는 방법에 대한 몇 가지 예제 스크립트로 나를 도울 수 있습니까?

+4

예, 가능합니다. – Pointy

+0

확실히 불가능하지 않습니다. 수정 된 태그. – ybo

+0

촬영! 내 원래의 질문을 편집했습니다 – oshirowanen

답변

6

간단한 메커니즘 :

var intervalWork = (function() { 
    var workers = [], wi = 0; 
    var interval = setInterval(function() { 
    if (!workers.length) return; 
    workers[wi](wi); 
    wi = (wi + 1) % workers.length; 
    }, 60 * 1000); 

    return function(w) { 
    workers.push(w); 
    }; 
})(); 

는 그런 다음 함수가 큐에 추가 할 수 있습니다 "intervalWork"라는 함수가 있습니다. 타이머 간격 당 하나의 기능 (여기서는 60 초)이 실행됩니다. 함수는 대기열에서 해당 인덱스를 전달받습니다. 그건 일반적으로 흥미롭지는 않지만 그 메시지를 인쇄 할 수있게 해줄 것입니다.

intervalWork(function(index) { 
    // do interesting stuff 
    console.log("Function " + index + " " + new Date()); 
}); 

또는 당신이 그것을 호출하고 이미 정의 된 함수의 이름을 전달할 수 :

기능은 다음과 같이 호출 할 것이다

intervalWork(someRandomFunction); 

당신은 물론이 애호가 만들 수 및 다른 실행 모드를 제공하거나, 뭐든간에. 이 코드의 전체적인 점을 설명하지 않았으므로 더 많은 것을 원할 것입니다.

편집 — 한 번 더 참고 : 많은 사람들이 (바르게) 대신에 브라우저의 setInterval() 메커니즘에 의해 구동되는 타이머의, setTimeout()를 사용하고 이후의 각 타이머 자신을 설정하는 일을하는 것이 더있을 수 있음을 시사 있습니다. 그것은 "작업자"기능이 수행하는 작업을 제어하지 않기 때문에 일의 양이 일종의 무제한 인 당신과 매우 흡사합니다. 그러나 기본 설정은 동일합니다.

+0

명확한 간격도 처리해야합니까? – vsr

+0

예, 타이머를 중지하고, 다시 시작하고, 작업자 목록에서 항목을 제거하고, 다시 시작하기 위해 전체 목록을 지울 수도 있습니다. 모든 것들이이 메커니즘에 추가 될 수 있습니다. – Pointy

+0

나는 이것이 나를 기반으로하는 훌륭한 기반이라고 생각한다. – oshirowanen

1
var functions = [function() {console.log('function 1')}]; 
var idx = 0; 

setInterval(function() { 
    functions[idx](); 
    idx = (idx + 1) % functions.length; 
}, 1000); 

// on button click: 
functions.push(function() {console.log('function 2')});