2012-06-17 3 views
0

나는이 tutorial을 사용하여 주어진 기간 동안 변경을 구현하기위한 기본 javascript 함수를 작성했습니다.점진적 변경을위한 Javascript 함수

function fadetext(){ 
if(hex>0) { 
hex-=11; 
document.getElementById("sample").style.color="rgb("+hex+","+hex+","+hex+")"; 
setTimeout("fadetext()",20); 
} 
else 
hex=255 
} 

질문 1 :function를 통해 변수를 입력하는 방법; 예 : fadetext(element, time). 단순히 값을 변수로 바꾸는 것만으로는 그럴 수 없었습니다.

질문 2 : 점차적으로 자바 스크립트로 변경을 구현하는 표준 (및 오른쪽) 방법입니까? 나 혼란스러운 점은 우리가 fadetext() 함수를 자체 함수 안에 사용한다는 것이다. 과부하가되지 않습니까?

+0

자체를 호출하는 함수에는 아무런 문제가 없습니다. (비록 네가하지는 않지만) – SLaks

+0

@SLaks 내 이유는 무엇입니까? 나는 튜토리얼 코드를 참조했다. – Googlebot

+2

@Ali : 함수 * 일정 자체가 * 호출 * 자체는 아닙니다. 매우 중요한 차이가 있습니다. – Amadan

답변

5

당신은 setTimeout에, 함수가 아닌 문자열을 전달해야합니다

function fadeText(element, duration) { 
    ... 
    setTimeout(function() { 
     fadeText(element, duration); 
    }, 20); 
} 

이 코드는 폐쇄 원래 매개 변수를 캡처 익명 함수를 전달합니다.

1

예, 함수 외부 fadetext()에 대한 타이머를 설정하고 전역 변수로 외부 hex을 정의, 그래서 당신은 두 문제를 해결 :) 과의 setTimeout 때마다 호출 피하기 위해 setInterval()를 사용하고, 대신 함수를 호출해야합니다 끈. (한 사용자가 지적했듯이 내 코드에는 재사용 문제가 있습니다.) 보너스로

var hex = 255; 
setInterval(fadetext,20); 

function fadetext(){ 
    if(hex>0) { 
    hex-=11; 
    document.getElementById("sample").style.color="rgb("+hex+","+hex+","+hex+")"; 
    } 
} 

, 당신은 jQuery를을 조사 할 수 페이딩 (및 기타 애니메이션 작업)는 종종 하나의 명령 또는 명령 줄에서 구현하기 정말 간단됩니다.

+1

아니요. 문자열을'setTimeout'에 전달하지 마십시오. 또한 재사용 할 수 없습니다. – SLaks

+0

젠장, 나는 그의 코드를 편집하고 있었다 (sloppily). 문자열을 수정했습니다. (함수를 전달하는 것이 가장 확실한 방법 인 것처럼 보이지만 문자열을 사용하는 많은 예제를 보았습니다. 이제는 브라우저 간 호환성에 대해 궁금합니다.) – Cranio

+1

@SLaks 그런데 솔루션은 매우 우아하지만 해결책은 무엇입니까? 함수 스택 호출에 오버 헤드가 발생합니까? – Cranio