我想自動2個PNG圖像之間在兩個不同的時間間隔一個初始延遲之後切換:顯示2秒鐘使用Javascript - 圖像之間的切換與不同的時間間隔
- 圖像A(初始延遲)
- 圖像B被示出0.3秒 所示6秒
- 來自步驟2
我發現問題Javascript - Switching Between Two Images與letiagoalves’教學代碼,示出如何將兩個圖像之間交替,示出了用於相同量的時間兩個圖像:
<img id="Change_Image" src="http://placehold.it/200x200" alt="Letter A">
function change_image() {
var url = document.getElementById('Change_Image').src;
if (url == 'http://placehold.it/200x200') {
document.getElementById('Change_Image').src = 'http://placehold.it/100x100';
} else {
document.getElementById('Change_Image').src = 'http://placehold.it/200x200';
}
}
setInterval(change_image, 2000);
...並試圖修改它通過使用各種組合setInterval()
和setTimeout
來顯示不同的圖像,迄今無濟於事:
- 使用一個
setTimeout()
和兩個setInterval()
:- 這裏思想是顯示一個啓動圖像A和
start_animation()
使用setTimeout()
等待2秒鐘調用change_image()
顯示圖像之前B.同時每0.3秒呼叫change_back()
,使得圖像B從不顯示超過0.3秒,並且每6秒調用一次change_image()
,使得圖像B每6秒顯示一次。 - 結果 - 圖像切換,但間隔時間有點不確定:有時圖像B顯示在預期的時間附近,有時候它會非常短暫地閃爍。我想這是因爲
change_image()
和change_back()
同時執行時的干擾模式。
- 這裏思想是顯示一個啓動圖像A和
代碼:
function start_animation() {
change_image();
}
function change_image() {
document.getElementById('Change_Image').src = 'http://placehold.it/100x100';
}
function change_back() {
document.getElementById('Change_Image').src ='http://placehold.it/200x200';
}
var initialTimout = 2000; //Time in milliseconds
var longInterval = 6000; //Time in milliseconds
var shortInterval = 300; //Time in milliseconds
setTimeout(start_animation, initialTimout);
setInterval(change_image, longInterval);
setInterval(change_back, shortInterval);
setInterval()
和改變間隔,因爲我們走:
- 這裏的想法是
change_image()
照顧所有的圖像變化,並根據顯示哪個圖像,setInterval
的時間間隔發生了變化。 - 結果 - 此解決方案同時顯示兩個圖像(初始超時時間),這不是目標。我研究瞭如何在函數外部更改變量,但必須要麼是錯誤的,要麼JS不允許在調用
setInterval()
後更改時間間隔。
代碼:
interval = 2000;
function change_image() {
var url = document.getElementById('Change_Image').src;
if (url == 'http://placehold.it/200x200') {
document.getElementById('Change_Image').src = 'http://placehold.it/100x100';
window.interval = 300;
} else {
document.getElementById('Change_Image').src = 'http://placehold.it/200x200';
window.interval = 6000;
}
}
setInterval(change_image, interval);
- 使用連續
setTimeout()
的:- 想到這裏是讓
change_image()
和change_back()
在最初的2秒超時後一遍又一遍地呼叫對方,並使用setTimeout()
來確保呼叫延遲並且它們之間的時間是正確的。 - 結果 - 似乎根本沒有工作:只顯示圖像A.
- 想到這裏是讓
代碼:
function start_animation() {
change_image();
}
function change_image() {
document.getElementById('Change_Image').src = 'http://placehold.it/100x100';
change_back();
}
function change_back() {
document.getElementById('Change_Image').src ='http://placehold.it/200x200';
}
setTimeout(start_animation, 2000);
setTimeout(change_back(), 300);
setTimeout(change_image(),6000);
是否有Javascript功能來解決這個問題的好辦法?
怎麼樣?
謝謝@phtrivier,會承諾(我不知道他們,必須在他們讀)在這種情況下添加任何特別的好處給最終用戶或我? (就像不要在用戶那邊阻止執行一樣/更快) – 2014-09-26 05:34:53
我認爲他們會在代碼的清晰度方面增加很多,這本身就是一件好事!此外,使用promise來表示異步行爲增加了以有趣的方式組合*異步函數的可能性(查看Promise.all,Promise.catch等)。 – phtrivier 2014-09-26 07:53:45