国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JavaScript異步編程之Jscex無創痕切入jQueryUI

開發 前端
很多人可能會有個疑問,Jscex和其他類庫共同使用或者語法混用時,會不會出現沖突或者異常?那么我們就來做個嘗試吧!

我們使用tab插件:

  1. <script> 
  2. $(function () {  
  3. $("#tabs").tabs({ event: "mouseover" });  
  4. });  
  5. </script> 

效果:鼠標劃過就可以切換tab.

 Jscex是JavaScript Computation EXpressions的縮寫,它為JavaScript語言提供了一個monadic擴展,能夠顯著提高一些常見場景下的編程體驗。Jscex項目完全使用JavaScript編寫,能夠在任意支持ECMAScript 3的執行引擎里使用,包括各瀏覽器及服務器端JavaScript環境(例如 Node.js )。

目前Jscex主要包括以下幾點功能:

JIT編譯器:在運行時動態編譯代碼,主要用于開發環境。

AOT編譯器:在執行前靜態編譯代碼。靜態編譯后的代碼可以脫離JIT編譯器執行,因此主要用于生產環境。

異步編程庫:基于Jscex生成的monadic代碼,大大簡化JavaScript下的異步編程難度。

異步編程的重要性不言而喻,對于JavaScript來說更是如此。JavaScript并沒有提供任何能夠阻塞代碼執行過程的機制,任何一個“耗時”的操作都必須寫成異步的模式。傳統的異步操作會在完成時通過回調函數傳回結果,我們可以在回調函數中進行下面的工作。

但這也是造成異步編程十分困難的主要原因。我們一直習慣于“線性”地編寫邏輯,但是異步操作所帶來的大量回調把我們的算法分解地支離破碎。我們不能用if來實現邏輯分支,也不能用while/for/do來實現循環。更不提異步操作之間的組合、錯誤處理以及取消操作了。

Jscex及它的異步編程庫便是為了解決這些困難而誕生的。

Jscex是JavaScript Computation EXpressions的縮寫,它為JavaScript語言提供了一個monadic擴展,能夠顯著提高一些常見場景下的編程體驗。Jscex項目完全使用JavaScript編寫,能夠在任意支持ECMAScript 3的執行引擎里使用,包括各瀏覽器及服務器端JavaScript環境(例如 Node.js )。

目前Jscex主要包括以下幾點功能:

JIT編譯器:在運行時動態編譯代碼,主要用于開發環境。

AOT編譯器:在執行前靜態編譯代碼。靜態編譯后的代碼可以脫離JIT編譯器執行,因此主要用于生產環境。

異步編程庫:基于Jscex生成的monadic代碼,大大簡化JavaScript下的異步編程難度。

異步編程的重要性不言而喻,對于JavaScript來說更是如此。JavaScript并沒有提供任何能夠阻塞代碼執行過程的機制,任何一個“耗時”的操作都必須寫成異步的模式。傳統的異步操作會在完成時通過回調函數傳回結果,我們可以在回調函數中進行下面的工作。

但這也是造成異步編程十分困難的主要原因。我們一直習慣于“線性”地編寫邏輯,但是異步操作所帶來的大量回調把我們的算法分解地支離破碎。我們不能用if來實現邏輯分支,也不能用while/for/do來實現循環。更不提異步操作之間的組合、錯誤處理以及取消操作了。

Jscex及它的異步編程庫便是為了解決這些困難而誕生的。

后來,官網幫這個tab插件擴展了一個自動切換的功能,只需要這樣寫就行:

  1.  <script type="text/javascript"> 
  2. $(function () {  
  3. var t = $("#tabs").tabs();  
  4. t.tabs("rotate", 3000, false);  
  5. });  
  6. </script> 

擴展的代碼如下:

  1.  $.extend($.ui.tabs.prototype, {  
  2. rotation: null,  
  3. rotate: function (ms, continuing) {  
  4. var self = this,  
  5. o = this.options;  
  6. var rotate = self._rotate || (self._rotate = function (e) {  
  7. clearTimeout(self.rotation);  
  8. self.rotation = setTimeout(function () {  
  9. var t = o.selected;  
  10. self.select(++t < self.anchors.length ? t : 0);  
  11. }, ms);  
  12. if (e) {  
  13. e.stopPropagation();  
  14. }  
  15. });  
  16. var stop = self._unrotate || (self._unrotate = !continuing  
  17. ? function (e) {  
  18. if (e.clientX) { // in case of a true click  
  19. self.rotate(null);  
  20. }  
  21. }  
  22. : function (e) {  
  23. t = o.selected;  
  24. rotate();  
  25. });  
  26. // start rotation  
  27. if (ms) {  
  28. this.element.bind("tabsshow", rotate);  
  29. this.anchors.bind(o.event + ".tabs", stop);  
  30. rotate();  
  31. // stop rotation  
  32. } else {  
  33. clearTimeout(self.rotation);  
  34. this.element.unbind("tabsshow", rotate);  
  35. this.anchors.unbind(o.event + ".tabs", stop);  
  36. delete this._rotate;  
  37. delete this._unrotate;  
  38. }  
  39. return this;  
  40. }  
  41. });  
  42. })(jQuery); 

依然是那么費解的代碼!在官方沒有擴展之前,我們可以用Jscex介樣子實現:

  1.  <script type="text/javascript"> 
  2. var swicthAsync = eval(Jscex.compile("async", function () {  
  3. var tabCount = $("#tabs ul li").length;  
  4. while (true) {  
  5. for (var i = 0; i < tabCount; i++) {  
  6. $await(Jscex.Async.sleep(2000));  
  7. $('#tabs').tabs({ selected: i });  
  8. }  
  9. }  
  10. }));  
  11. $(function () {  
  12. $("#tabs").tabs();  
  13. swicthAsync().start();  
  14. });  
  15. </script> 

可以看得出來,這樣的話Jscex沒有對JqueryUI做任何介入,Jscex只是外部控制的一層殼。這樣無法對測試出Jscex是否能與沖突或者異常,那么,我們就來用Jscex重寫官方的擴展方法吧!

  1.  $.extend($.ui.tabs.prototype, {  
  2. rotation: null,  
  3. rotate: function (ms, continuing) {  
  4. var self = this,  
  5. o = this.options;  
  6. var swicthAsync = eval(Jscex.compile("async", function () {  
  7. while (true) {  
  8. for (var i = 0; i < self.anchors.length; i++) {  
  9. $await(Jscex.Async.sleep(ms));  
  10. self.select(i);  
  11. }  
  12. }  
  13. }));  
  14. swicthAsync().start();  
  15. return this;  
  16. }  
  17. });  
  18. })(jQuery); 

運行效果如下,一切正常!但是continuing參數暫時沒有起作用,該參數是決定用戶在選中后是否繼續循環下去,這個就留個大家自己去完善吧~~~~

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

原文:http://www.cnblogs.com/iamzhanglei/archive/2011/08/21/2148628.html

【系列文章】

  1. Jscex模擬重力場與google蘋果logo的比較
  2. JavaScript異步編程之用Jscex畫圓
  3. 使用Jscex改善JavaScript異步編程體驗
  4. jQuery異步調用頁面后臺實例分析
  5. 一道面試題引發的面壁:認識JavaScript的settimeout和異步
責任編輯:陳貽新 來源: zhanglei的博客
相關推薦

2012-06-14 14:03:19

JavaScript

2011-11-10 10:23:56

Jscex

2011-11-16 13:22:38

Jscex

2011-11-17 16:14:25

Jscex

2011-07-27 14:10:43

javascript

2011-11-11 14:05:13

Jscex

2012-06-14 13:40:04

JavaScript

2016-10-21 11:04:07

JavaScript異步編程原理解析

2012-06-14 14:42:42

JavaScript

2012-06-14 14:09:58

JavaScript

2020-10-15 13:29:57

javascript

2015-04-22 10:50:18

JavascriptJavascript異

2014-05-23 10:12:20

Javascript異步編程

2017-07-13 12:12:19

前端JavaScript異步編程

2016-09-07 20:43:36

Javascript異步編程

2012-10-29 13:25:54

JavaScriptJSjQuery

2021-06-02 09:01:19

JavaScript 前端異步編程

2011-11-11 15:47:22

JavaScript

2011-11-10 15:43:23

JavaScript

2012-03-01 20:32:29

iOS
點贊
收藏

51CTO技術棧公眾號

92国产精品视频| 国产网站av| 四季av在线一区二区三区| 国产亚洲精品综合一区91| 少女频道在线观看高清| 欧美视频在线一区二区三区| 女生裸体视频网站免费观看| 中文字幕第一区二区| 亚洲不卡中文字幕无码| 激情图片小说一区| 欧美日韩一区在线观看视频| 一本不卡影院| 美日韩精品免费| 日韩成人免费看| 中文字幕一区二区三区精彩视频 | 在线观看成人免费| 麻豆国产91在线播放| 日韩精品一区二区三区丰满 | 国产在线1区| 精品久久久久久久久久久久包黑料| 日本视频在线观看| 欧美一区二区三级| 888av在线视频| 亚洲天堂男人天堂女人天堂| 精品久久久网| 欧美精品www| 国产欧美日韩精品一区二区免费 | 国产51人人成人人人人爽色哟哟| 福利一区视频在线观看| 丝袜视频国产在线播放| 欧美性色aⅴ视频一区日韩精品| 国产小视频在线| 日韩一区二区中文字幕| 欧美下载看逼逼| 久久激情综合| 肉大捧一出免费观看网站在线播放 | 欧美精品午夜视频| 久久精品亚洲成在人线av网址| 91av在线免费观看视频| 日韩精品首页| 欧美精品成人一区二区在线观看 | 欧美日本国产视频| 国产剧情av在线播放| 亚洲人精品午夜在线观看| 激情亚洲小说| 国产精品美女免费| 黄页在线播放| 亚洲欧洲无码一区二区三区| 性色视频在线观看| 精品呦交小u女在线| 国产伦理久久久久久妇女| 国产美女搞久久| 日韩和欧美的一区| 91在线视频观看免费| 色综合久久综合网欧美综合网| 成人在线网址| 不卡伊人av在线播放| 久久精品久久久| 二级片在线观看| 亚洲影视在线播放| 成av人片在线观看www| 97超级碰在线看视频免费在线看| 国产精品vip| 色综合av综合无码综合网站| 午夜精品久久久久久久久| 污污的视频在线观看| 欧美成人精品三级在线观看| 99久久亚洲精品蜜臀| 欧美美女黄色网| 同产精品九九九| 久久精品资源| 91麻豆蜜桃| 91免费视频网址| 视频免费一区| 97在线视频观看| 国产一区二区中文字幕| 最新天堂资源在线| 色噜噜亚洲精品中文字幕| 欧美96在线丨欧| 欧美一级特黄a| 亚洲精品一区二区三区香蕉| 精品国产乱码久久久久久蜜坠欲下| 在线播放 亚洲| 在线亚洲免费视频| 久久丝袜视频| 黄色大片中文字幕| 精品国产麻豆免费人成网站| 激情综合网五月| 波多野结衣家庭教师在线播放 | 未来日记在线观看| 美乳少妇欧美精品| 琪琪一区二区三区| 一级片在线视频| 欧美激情按摩在线| 狠狠色2019综合网| 日本在线视频1区| 久久人人爽国产| 成人免费高清在线| 18av在线播放| 999热视频在线观看| 中文字幕欧美激情一区| 日日夜夜天天综合| 天堂√在线观看一区二区| 天天综合天天做天天综合| 大胆国模一区二区三区| 亚洲午夜激情| 宅男噜噜噜66一区二区66| 日韩在线观看电影完整版高清免费悬疑悬疑 | 欧美日韩在线视频观看| 高清欧美性猛交xxxx黑人猛| 91成人在线视频观看| 欧美久久一区二区| 欧美另类女人| 欧美孕妇孕交| 91九色精品视频| 午夜精品久久久久久久| 亚洲精品亚洲人成在线| 一区二区三区韩国| 欧美日韩成人黄色| 99久精品国产| 色综合天天色| 99在线免费视频观看| 亚洲天堂av电影| 国产成人av一区二区三区在线观看| av网站网址在线观看| 国产在线一区二区三区播放| 色综合婷婷久久| 欧美国产美女| 青青国产在线| 成人毛片网站| 欧美性欧美巨大黑白大战| 911精品美国片911久久久| 在线免费看黄色| 国产精品一区二区三区在线| 欧美精品一级二级| 久久婷婷久久| 日韩福利一区| 少妇高清精品毛片在线视频| 久久久亚洲国产天美传媒修理工| 国产一区二区三区四区五区美女| 色老头在线一区二区三区| 免费观看中文字幕| 久久久成人精品视频| 国产精品视频免费| 凹凸成人精品亚洲精品密奴| 污视频网站在线| 欧美成人欧美edvon| 久久国产夜色精品鲁鲁99| 在线黄色的网站| av片中文字幕| 国产成人综合久久| 在线观看一区不卡| 日韩国产高清影视| 成人国产精品| 少妇人妻互换不带套| 欧美自拍大量在线观看| 欧美性xxxx| 精品一区二区免费看| 国产精品777777在线播放| 成人免费淫片在线费观看| 国产日韩在线看| 日韩美女一区二区三区四区| 成人妖精视频yjsp地址| 粉嫩av一区二区| 国产爆初菊在线观看免费视频网站| 久久精品日产第一区二区三区 | 深夜国产在线播放| wwwwww欧美| 欧美在线观看一区二区三区| 色婷婷精品久久二区二区蜜臂av| 久久亚洲二区| 日韩综合av| 偷拍自拍在线| 国产成人精品免费看在线播放 | 天天操天天干天天综合网| 午夜亚洲精品| mm131国产精品| 免费污视频在线一区| 色综合视频一区二区三区日韩 | 久久久久久国产精品美女| 91福利入口| 国产探花视频在线观看| 四虎影视在线观看2413| 日韩黄色三级在线观看| 国产va免费精品观看精品视频 | 亚洲精品97久久| 亚洲精品美女免费| 国产精品久在线观看| 欧美一二三不卡| 最新超碰在线| 综合久久99| 中文字幕一区二区三区乱码在线| 亚洲丁香久久久| 91一区二区三区| 波多野结衣综合网| 午夜成在线www| 欧洲精品一区二区三区| 午夜欧美精品| 欧美国产一区在线| 国内精品久久久久伊人av|