Jscex+jQuery UI打造遊戲力度條

來源:互聯網
上載者:User

如果大家玩過桌球類遊戲的話,對力度條的概念一定不會陌生,如:

還有豎直方向上的力度條,如:

其實,類似的條條無處不在!比如進遊戲時候的進度條、魔獸世界裡法師施法過程中讀的條等等······

引入jquery ui,我們可以輕鬆得到下面這個靜止的力度條:

html:

 
  1. <div class="progressbar" style=" width: 20%"> 
  2. /div> 

js:

 
  1. $(function () {  
  2. $(".progressbar").progressbar({  
  3. value: 37  
  4. });  
  5. }); 

效果如下:

加入Jscex讓它動起來:

 
  1.  <script type="text/javascript"> 
  2. $(function () {  
  3. $(".progressbar").progressbar({  
  4. value: 5  
  5. });  
  6. });  
  7. var executeAsync = eval(Jscex.compile("async", function (proceedValues) {  
  8. while (proceedValues < 100) {  
  9. proceedValues++;  
  10. $await(Jscex.Async.sleep(50));  
  11. $(".progressbar").progressbar({  
  12. value: proceedValues  
  13. });  
  14. }  
  15. }));  
  16. function btnExecuteAsync_onclick() {  
  17. executeAsync(5).start();  
  18. }  
  19. </script> 
  20. <div class="progressbar" style=" width: 20%"> 
  21. </div> 
  22. <input id="btnExecuteAsync" type="button" value="開始" onclick="return btnExecuteAsync_onclick()" /> 

效果如下:

 

但是通常情況下,我們需要它往返無限迴圈下去,那麼我們應該這麼實現:

 
  1. var executeAsync = eval(Jscex.compile("async", function (proceedValues) {  
  2. while (true) {  
  3. while (proceedValues < 100) {  
  4. proceedValues++;  
  5. $await(Jscex.Async.sleep(10));  
  6. $(".progressbar").progressbar({  
  7. value: proceedValues  
  8. });  
  9. }  
  10. if (proceedValues == 100) {  
  11. while (proceedValues > 0) {  
  12. proceedValues--;  
  13. $await(Jscex.Async.sleep(10));  
  14. $(".progressbar").progressbar({  
  15. value: proceedValues  
  16. });  
  17. }  
  18. }  
  19. }  
  20. })); 

效果如下:

 

就在這個時候,我一不小心,把if (proceedValues == 100) { } 注釋掉了,代碼變成這個樣子:

 
  1. var executeAsync2 = eval(Jscex.compile("async", function (proceedValues) {  
  2. while (true) {  
  3. while (proceedValues < 100) {  
  4. proceedValues++;  
  5. $await(Jscex.Async.sleep(10));  
  6. $(".progressbar3").progressbar({  
  7. value: proceedValues  
  8. });  
  9. }  
  10. //if (proceedValues == 100) {  
  11. while (proceedValues > 0) {  
  12. proceedValues--;  
  13. $await(Jscex.Async.sleep(10));  
  14. $(".progressbar3").progressbar({  
  15. value: proceedValues  
  16. });  
  17. }  
  18. //}  
  19. }  
  20. })); 

我運行一下,等著他報ERROR,結果奇蹟出現了,效果如下,和上面一模一樣,沒有報錯!

可以看得出來,內部的兩個while不是同時執行的,而是非常線性,它們之間會相互等待,而且最開始的執行順序是從上至下,內部的while執行完了,再跳到最外層的while重新執行。

這種設計方式,無疑是優雅的!!

上面那種三個while的方式語意性很好,從剛剛分析得出,代碼還可以這樣寫:

 
  1. var executeAsync = eval(Jscex.compile("async", function (proceedValues) {  
  2. while (proceedValues < 100) {  
  3. proceedValues++;  
  4. $await(Jscex.Async.sleep(10));  
  5. $(".progressbar").progressbar({  
  6. value: proceedValues  
  7. });  
  8. if (proceedValues == 100) {  
  9. while (proceedValues > 0) {  
  10. proceedValues--;  
  11. $await(Jscex.Async.sleep(10));  
  12. $(".progressbar").progressbar({  
  13. value: proceedValues  
  14. });  
  15. }  
  16. }  
  17. }  
  18. })); 

這樣相當於永遠跳不出最外層的proceedValues < 100,所以也會無限迴圈下去。

最新的Jscex 庫,請上https://github.com/JeffreyZhao/jscex或者http://www.sndacode.com/projects/jscex/wiki下載吧····

更多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.