2013-01-06 3 views
0

그래서 예상대로 작동하지 않는 캔버스를 페이드 아웃하기 위해 이러한 기능을 사용하고 있습니다. 다음은 현재 내가 작업하고있는 내용입니다.캔버스 페이드 인/아웃 기능이 예상대로 작동하지 않습니다.

function fade_out() 
{ 
    var canvas = document.getElementById("builder"); 
    var context = canvas.getContext('2d'); 

    console.log(context.globalAlpha); 

    context.globalAlpha -= 0.01; 

    if(context.globalAlpha > 0) 
    { 
     setTimeout(fade_out, 5); 
    } 
} 
function fade_in() 
{ 
    var canvas = document.getElementById("builder"); 
    var context = canvas.getContext('2d'); 

    context.globalAlpha += 0.01; 

    if(context.globalAlpha < 1) 
    { 
     setTimeout(fade_in, 5); 
    } 
} 

내 의도는 0.5 초 페이드로 만드는 것이 었습니다. 내가 결국에 깜박이는 것은 깜박 거리는 순간이었습니다. 첫 번째 함수의 console.log는 내가 기대했던 방식대로 작동하지 않는다고 알려줍니다. 여기서 무엇이 잘못 되었습니까?

편집 : 무한 루프가 진행되는 것처럼 보입니다. context.globalAlpha는 숫자를 사용하지 않아도 20 자리 숫자로 나옵니다.

답변

1
function fade_in() { 
setTimeout(function() { 
    var cn = document.getElementById("builder"); 
    var ct = cn.getContext('2d').globalAlpha; 
    ct += 0.02; 
    if(ct >= 1) { 
     ct=1; 
    } 
    if (ct < 1) { 
    fade_in(); 
    } 
    else { 
    return false; 
    } 
}, 30); 
} 
function fade_out() { 
setTimeout(function() { 
    var cn = document.getElementById("builder"); 
    var ct = cn.getContext('2d').globalAlpha; 
    ct -= 0.02; 
    if(ct <= 0) { 
     ct=0; 
    } 
    if (ct > 0) { 
    fade_out(); 
    } 
    else { 
    return false; 
    } 
}, 30); 
} 
+0

아, 그 중 하나는 놓치지 만 여전히 깜박 거리고 있습니다. 또한 console.log는 루프에서 숫자를 사용하지 않았지만 숫자가 20 자리 숫자 (예 : 0.09999992698431015) 인 무한 루프를 보여줍니다. – Fibericon

+1

setTimeout 함수의 시간을 100 또는 200으로 늘린 다음 확인하십시오! –

+1

@Fibericon 위의 편집 된 답변을 참조하십시오. D –

관련 문제