2016-07-01 1 views
2

하나의 페이지에 4 개의 카운터가 있습니다. 각 함수마다 별도의 함수를 호출했습니다. 모든 함수를 단일 함수로 통합해야합니다.하나의 함수로 4 개의 함수를 통합

var tt1 = setInterval(function() { 
 
    startTimee() 
 
}, 50); 
 
var counter1 = 1; 
 

 
function startTimee() { 
 
    if (counter1 == 10) { 
 
    clearInterval(tt1); 
 
    } else { 
 
    counter1++; 
 
    } 
 
    document.getElementById('counter1').innerHTML = counter1; 
 

 
} 
 
var tt = setInterval(function() { 
 
    startTime() 
 
}, 5); 
 
var counter = 1; 
 

 
function startTime() { 
 
    if (counter == 600) { 
 
    clearInterval(tt); 
 
    } else { 
 
    counter++; 
 
    } 
 
    document.getElementById('counter2').innerHTML = counter; 
 
} 
 
var tt2 = setInterval(function() { 
 
    startTime2() 
 
}, 50); 
 
var counter2 = 1; 
 

 
function startTime2() { 
 
    if (counter2 == 30) { 
 
    clearInterval(tt2); 
 
    } else { 
 
    counter2++; 
 
    } 
 
    document.getElementById('count3').innerHTML = counter2; 
 
} 
 
var tt3 = setInterval(function() { 
 
    startTime3() 
 
}, 50); 
 
var counter3 = 1; 
 

 
function startTime3() { 
 
    if (counter3 == 6) { 
 
    clearInterval(tt3); 
 
    } else { 
 
    counter3++; 
 
    } 
 
    document.getElementById('counter4').innerHTML = counter3; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="counter1">10</div> 
 
<div id="counter2">600</div> 
 
<div id="counter3">30</div> 
 
<div id="counter4">6</div>

+0

당신은 그들 모두 같은'setTimeout' 코드에서 실행 만들려고 노력하고 있습니까? –

+0

그래, 같은 setInterval에서 실행해야합니다 – user3386779

답변

2

당신은 같은 것을 할 수 있습니다 : 그것은 지금까지 가장 최적의 코드가 아닙니다, 그러나 당신을 위해 단지 예입니다

var time = 1, interval = setInterval(tick, 50); 
 

 
function tick() 
 
{ 
 
    if (time <= 10) 
 
    document.getElementById('counter1').innerHTML = time; 
 

 
    if (time <= 600) 
 
    document.getElementById('counter2').innerHTML = time; 
 

 
    if (time <= 30) 
 
    document.getElementById('counter3').innerHTML = time; 
 

 
    if (time <= 6) 
 
    document.getElementById('counter4').innerHTML = time;  
 

 
    if (++time > 600) 
 
    clearInterval(interval); 
 
}
<p id="counter1"></p> 
 
<p id="counter2"></p> 
 
<p id="counter3"></p> 
 
<p id="counter4"></p>

을 주요 원칙을 얻으십시오.

+0

'return clearInterval (...)'그것은 일종의 이상한 방법입니다 - 의미있는 값이 반환된다는 것을 의미합니다. 함수의 끝에'if' 문을 옮긴다면'return' 문은 전혀 필요 없습니다. – nnnnnn

+0

@nnnnnn 예, 당신 말이 맞아요, 고쳤습니다. 감사. –

+0

@nnnnnn Javascript에서 'return'의 사용법은 다른 강력한 형식의 언어와 다르며'return clearInterval (interval);을 사용하는 것은주의를 기울이는 모든 독자에게 분명합니다. 반환 값이이 언어에서 사용되지 않거나 관련성이없는 것이 일반적입니다. –

2

값을 가져 오는 위치에 따라이 작업을 수행 할 수있는 몇 가지 방법이 있습니다.

첫 번째 옵션은 spanid 및 계산할 최대 값을 보유하는 개체를 만드는 것입니다.

var countCeiling = { 
 
    counter1: { 
 
    end: 10 
 
    }, 
 
    counter2: { 
 
    end: 600, 
 
    start: 0 
 
    }, 
 
    counter3: { 
 
    end: 30, 
 
    start: 0 
 
    }, 
 
    counter4: { 
 
    end: 6, 
 
    start: 0 
 
    } 
 
}; 
 

 
var timerID = setInterval(function() { 
 
    var stopTimer = true; 
 

 
    for (var id in countCeiling) { 
 
    var data = countCeiling[id]; 
 
    var span = document.getElementById(id); 
 

 
    var val = data.current || data.start || 0; 
 

 
    data.current = val + 1; 
 

 
    if (val <= data.end) { 
 
     span.innerHTML = val; 
 
     stopTimer = false; 
 
    } 
 

 
    } 
 

 
    if (stopTimer) { 
 
    clearInterval(timerID); 
 
    } 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="counter1">10</div> 
 
<div id="counter2">600</div> 
 
<div id="counter3">30</div> 
 
<div id="counter4">6</div>

+0

실제로'stopTimer'를 테스트하는 것을 잊어 버렸지 만 반복 접근법을 좋아합니다. 만약 당신이'var val = data.current || data.start || 0;''counter' 개체에 대해'start' 속성을 옵션으로 만들 수 있습니다. – nnnnnn

+0

@nnnnnn 좋은 지적, 고마워. 결정된. 그 구성 배열의 속성 중 하나를'current '로 만드는 충동에 맞서 싸우고있었습니다 ... 최근에'TypeScript'가 최근에 나왔습니다;) –

관련 문제