1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的計(jì)時(shí)器問(wèn)題來(lái)自以下代碼行:
myTimer = setInterval(timerTick, myTimerSpeed);
間隔并不是真正的變量,當(dāng)您調(diào)用時(shí),setInterval
您正在創(chuàng)建一個(gè)間隔并返回對(duì)該間隔的引用。
因此,如果上面的代碼被調(diào)用兩次,您將運(yùn)行 2 個(gè)間隔,但只有對(duì)第二個(gè)的引用,這意味著它將永遠(yuǎn)運(yùn)行并且您不再擁有停止第一個(gè)所需的值。
你的朋友所做的是確保在開(kāi)始一個(gè)新的變量之前沒(méi)有他的變量引用的運(yùn)行間隔。
您可以通過(guò)將上面的行替換為以下內(nèi)容來(lái)獲得相同的結(jié)果:
if(myTimer) clearInterval(myTimer); myTimer = setInterval(timerTick, myTimerSpeed);
并使用var myTimer = false;
. 那應(yīng)該可以解決您的計(jì)時(shí)器問(wèn)題
為了修復(fù)轉(zhuǎn)換,我基本上從計(jì)時(shí)器啟動(dòng)/停止功能中刪除了它們的邏輯。所有轉(zhuǎn)換現(xiàn)在都由timerTick()
.
我添加了一個(gè)isBreak
變量來(lái)記住我們當(dāng)前是否處于中斷或設(shè)置狀態(tài),然后用于確定下一步是什么以及要獲取的計(jì)時(shí)器初始值。
我在代碼 ( resetAll()
& resetCurrent()
) 中包含了兩個(gè)重置功能,因?yàn)槲也恢滥且刂盟袃?nèi)容還是只重置當(dāng)前計(jì)時(shí)器。
它現(xiàn)在應(yīng)該如下工作:設(shè)置 -> 中斷 (5x) 并在最后一次中斷PAUSE
時(shí)顯示,而不是顯示Next Exercise
(loadNext()
如果您希望用戶能夠手動(dòng)啟動(dòng)它,您可以添加一個(gè)單擊偵聽(tīng)器調(diào)用)。
在loadNext()
您可以加載圖像,下一個(gè)練習(xí),如果你取消注釋startTimer()
它會(huì)馬上開(kāi)始。
結(jié)果: 小提琴
這是否如您所愿?
- 1 回答
- 0 關(guān)注
- 267 瀏覽
添加回答
舉報(bào)