Javascript簡單鬧鐘之實現

來源:互聯網
上載者:User

前兩天有一個朋友問我如何使用JavaScript實現鬧鐘,本以為很簡單,有現成的函數可以使用,但是發現現成的鬧鐘函數setTimeout()僅僅提供一次定時能力,而朋友需要多次的重複定時。這種需求其實在現實生活中非常的常見,具有廣泛的需求。無奈之下,只能自己動手寫一個簡單的鬧鐘啦。

 

簡單鬧鐘實現程式如下:

<html><br /><head><br /><mce:script type="text/javascript"><!--<br />var timer_count = 0;<br />var timer_is_on = false;<br />var timer_id;<br />function do_alarm()<br />{<br />document.getElementById( 'count' ).value = timer_count;<br />++ timer_count;<br />}<br />function do_timeout( timeout )<br />{<br />do_alarm();<br />timer_id = setTimeout( "do_timeout( " + timeout + " )", timeout );<br />}<br />function start_timer( timeout )<br />{<br />if ( !timer_is_on )<br />{<br />timer_window = window;<br />timer_is_on = true;<br />do_timeout( timeout );<br />}<br />}<br />function stop_timer()<br />{<br />if ( timer_is_on )<br />{<br />clearTimeout( timer_id );<br />timer_is_on = true;<br />timer_count = 0;<br />}<br />}<br />// --></mce:script><br /></head><br /><body><br /><form><br /><input type="button" value="Start Timer!" onClick="start_timer( 1000 )"><br /><input type="button" value="Stop Timer" onClick="stop_timer()"><br /><input type="text" id="count"><br /></form><br /></body><br /></html>

 

從代碼中我們可以看出:

1)start_timer()和stop_timer()是timer兩個r的控制函數。timeout參數主要用於如何設定逾時間隔,已微妙(milliseconds)為單位。

2)do_timeout()函數主要是通知定時時間已到,並設定下一輪定時時間。

3)do_alarm()是使用者需要執行的代碼。在代碼中,我們示範了一個定時計數的小小功能一邊使用者有一個直觀的觀察。

 

它的一個主要缺點是無法支援多個鬧鐘。在實際應用中,它的局限性非常的大,因為複雜的應用對於支援多鬧鐘是非常常見的運用。如何才能實現呢?

1)需要對start_timer和stop_timer進行改動,提供返回不同timer的標識。根據這種標識,應用能夠動態控制鬧鐘的開始和停止。

2)需要提供timer列表,維護不同的timer。

 

因為上述代碼架構已經比較好的考慮到這點,相信喜歡專研的網友一定能夠比較容易的實現多鬧鐘的情況。在多鬧鐘的實現中,需要注意的是如何維護timer列表的一致性,比如在alarm的時候如何克服使用者刪除操作的影響,如何保證同步等等。

 

 

【小結】

- JavaScript提供了簡單的鬧鐘函數setTimeout(),但是它具有局限性(只能定時一次)。

- 本篇文章中提供方案僅僅是一個簡單的鬧鐘,對於複雜需求也是無能為力的,之所以沒有提供一個完備的鬧鐘實現,主要是已經滿足朋友的需求,而無動力再次去完善啦:-)。

- 如果有現成的強大JavaScript庫的話,請最好使用它,畢竟自己寫代碼需要太多的時間和精力,又往往缺乏嚴格的測試,在關鍵的時候以最殘酷的手段呈現在程式員面前。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.