2011-12-26 3 views
1

암호 강도를 검사하는 도구를 만들었습니다. 결과는 0에서 100 사이의 숫자로 주어집니다. 더 좋게하려면 숫자를 카운터처럼 점차적으로 늘리거나 줄이기 위해 setTimeout 함수를 만들었습니다. 여기 값을 줄이기 위해 setTimeout을 호출합니다.

당신이 기능이 제대로 작동하는지 알 것 full code in jsfiddle

에 대한 링크 때 값이 증가하지만 값이 감소하지 않을 때. 나는 문제는이 코드 조각이라고 생각 :

function run() { 
    var i = lastGrade; 

    setTimeout(function updateProgress() { 
     x.style.width = i*1.5 + 'px'; 
     s.innerHTML = i + '%'; 
     if(lastGrade <= grade) { 
      if (i < grade){ 
       setTimeout(updateProgress, 10); 
      } 
      i++; 
     } 
     else if(lastGrade > grade) { 
      if (i > grade){ 
       setTimeout(updateProgress, 10); 
      } 
      i--; 
     } 
    }, 10); 
} 
+0

이 암호 강도 검사기가 제대로 작동하지 않는 것 같습니다. '123456789'로 테스트하십시오. http://www.passwordmeter.com/ –

+0

당신은 맞습니다. 아직도 그 문제에 관한 일을하고 있습니다 ...하지만 지금은 다른 문제를 찾으려고합니다. –

답변

2

문제는 당신이 시간 제한을 실행하기 전에 lastGrade를 업데이트하는 것입니다. 이것은 실제로 위아래 미터 애니메이션에 영향을 미치지 만 애니메이션이 감소하면 더 분명합니다.

더 기능적인 예를

은 여기에 있습니다 : http://jsfiddle.net/MrywR/

그러나, 당신은 아마 lastGrade 수신 거부에서 막대를 유지하기 위해, 애니메이션 미터로 사용되도록 코드를 조정할 할 수 있습니다.

변경된 코드 :

setTimeout(function updateProgress() { 
    x.style.width = i*1.5 + 'px'; 
    s.innerHTML = i + '%'; 
    if(lastGrade <= grade) { 
     if (i < grade){ 
      setTimeout(updateProgress, 10); 
     } else { 
      lastGrade = grade; 
     } 
     i++; 
    } 
    else if(lastGrade > grade) { 
     if (i > grade){ 
      setTimeout(updateProgress, 10); 
     } else { 
      lastGrade = grade; 
     } 
     i--; 
    } 
}, 10); 

업데이트

이 버전은 훨씬 더 전체 애니메이션을 처리합니다 http://jsfiddle.net/5yeP7/1/

그것은 빠른 입력을 처리하는 불필요한 폐쇄를 제거하고, 캡슐화 로컬 변수로서의 메소드

+0

잘 작동하지만 너무 빨리 입력하면 항상 0 %가 표시됩니다. – Hoque

+0

훨씬 깔끔한 다른 버전을 만들었습니다. 업데이트를 참조하십시오. – OverZealous

+0

업데이트가 작동하며 좋아했습니다. – Hoque

관련 문제