JavaScript에 함수를 설정하여 페이드 인하거나 내 페이지의 일부 요소를 페이드 아웃하려고합니다. 페이드 자체가 잘 작동하지만, 내 문제는 그들 중 하나가 다른 하나의 작업을 취소하려고 할 때 발생합니다.JavaScript로 Timed 루프를 취소 하시겠습니까?
//I know this is ugly, I'm just learning JavaScript again and plan to recode it after I learn some more...
var fadeOut = false
//set out to true to fade out, false to fade in
function fade(out) {
var steps = 1
var outSpeed = 100
var inSpeed = 10
var timer = 0
if (out) {
//fade out
fadeOut = true
for (var i=100; i>=0; i-=steps) {
if (fadeOut) {
setTimeout("set_el_opacity(" + (i/100) + ")",
timer+=steps
} else {
break;
}
}
} else {
//fade in
fadeOut = false
for (var i=0; i<=100; i+=steps) {
if(!fadeOut) {
setTimeout("set_el_opacity(" + (i/100) + ")",
timer+=steps
} else {
break;
}
}
}
}
이제 페이드 아웃 그들이 그것을 목적에 알고 있도록 천천히 페이드 아웃보고 내가 사용자를 원한다. 페이드보다 느리게 실행 한 다음 요소가 필요한 경우 다시 신속하게 페이드로 설정 (필요할 때 화면에서 약간의 혼란을 제거하십시오).
fade (true)가 잘 작동하고 fade (false)가 잘 작동하고 빠릅니다. 내 문제는 내가 fade (true)를 호출하고 바로 fade (false)를 호출 할 때 발생합니다. 페이드 (fade) 호출은 더 빠르게 실행되기 때문에 먼저 페이드 (fade) (false) 콜이 진행되어 완전히 페이드 아웃 (fade out)됩니다.
내 질문은 : 페이드 (false) 호출을 수행하면 페이드 (true) 호출의 루프를 취소 할 수 있습니까?
이mytime = setTimeout('function()', 1000);
당신 사항 clearTimeout를 사용하여 취소 할 수 있습니다 :
clearTimeout(mytime);
** 참고 ** :'setTimeout' /'setInterval'에 인수로 문자열을 전달하지 마십시오. 프로덕션 환경에서이를 사용하면 [XSS] (http://en.wikipedia.org/wiki/Cross-site_scripting "교차 사이트 스크립팅")에 취약 할 수 있습니다. 대신 * 익명 함수 *를 사용하십시오 :'setTimeout (function() {set_el_opacity (i/100);}, 1000),' – nyuszika7h