2015-10-20 88 views
0

有沒有什麼辦法讓函數以setTimeout運行並返回一個賦給變量的值?使用setTimeout時函數的返回值

我的意思的一個例子是這樣的:

function count(start, target) { 
    if (start < target) { 
    start += 0.1; 
    return start; 
    } else if (start > target) { 
    return target; 
    } 
    // i'm fully aware the return above will prevent this line occur 
    // this is my issue currently 
    setTimeout(function() { 
    count(start, target) 
    }, 1000); 
} 

var el = document.getElementById('test'); 
var value = count(0.0, 1.0); //get the opacity value 

function check() { 
    el.style.opacity = value; //assign what the value is in this moment 
    if (value != 1.0) { 
    setTimeout(check, 0); 
    } 
} 

check(); 

我知道這個代碼將無法正常工作,我想它的方式,因爲return出口的功能,我寫它來解釋什麼,我想做。

我想以這種方式做到這一點的原因是因爲我有一個元素,我想通過改變它的不透明度來淡入。

所以我有一個函數,它會使用我想要的任何緩動將開始值增加到目標值,然後返回將分配給元素的不透明屬性的所述值。

我不想將這個元素傳遞給這個count函數,因爲這意味着它限制了它的使用,因爲當我想要爲元素之外的其他元素製作動畫時。

這個問題的解決方案是什麼?

+0

https://jsfiddle.net/arunpjohny/e8qbohb9/2/ –

+0

@ArunPJohny所以我只需要在下一次函數調用之後放置返回值? – Sir

+0

是的......我想在前面的條目中有一個錯誤https://jsfiddle.net/arunpjohny/e8qbohb9/3/ –

回答

1

我認爲你正在嘗試做的是再次調用count方法,如果通過了starttarget的價值是不一樣的,如果這樣

function count(start, target) { 
    var ret; 

    if (start < target) { 
     ret = start + 0.1; 
    } else if (start > target) { 
     ret = target; 
    } 

    if (start != target) { 
     setTimeout(function() { 
      count(ret, target) 
     }, 1000); 
    } 
    return ret; 
} 
+0

我在這裏試過你的代碼:https://jsfiddle.net/fj8wz052/但對於我用console.log的值不會增加? – Sir

+0

@戴夫https://jsfiddle.net/arunpjohny/e8qbohb9/5/ - 如果你想有一個回調,然後做的方式略有不同 –

+0

@戴夫或https://jsfiddle.net/arunpjohny/e8qbohb9/ 6/ –