成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript異步編程之Jscex無創(chuàng)痕切入jQueryUI

開發(fā) 前端
很多人可能會(huì)有個(gè)疑問,Jscex和其他類庫(kù)共同使用或者語(yǔ)法混用時(shí),會(huì)不會(huì)出現(xiàn)沖突或者異常?那么我們就來做個(gè)嘗試吧!

我們使用tab插件:

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

效果:鼠標(biāo)劃過就可以切換tab.

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

目前Jscex主要包括以下幾點(diǎn)功能:

JIT編譯器:在運(yùn)行時(shí)動(dòng)態(tài)編譯代碼,主要用于開發(fā)環(huán)境。

AOT編譯器:在執(zhí)行前靜態(tài)編譯代碼。靜態(tài)編譯后的代碼可以脫離JIT編譯器執(zhí)行,因此主要用于生產(chǎn)環(huán)境。

異步編程庫(kù):基于Jscex生成的monadic代碼,大大簡(jiǎn)化JavaScript下的異步編程難度。

異步編程的重要性不言而喻,對(duì)于JavaScript來說更是如此。JavaScript并沒有提供任何能夠阻塞代碼執(zhí)行過程的機(jī)制,任何一個(gè)“耗時(shí)”的操作都必須寫成異步的模式。傳統(tǒng)的異步操作會(huì)在完成時(shí)通過回調(diào)函數(shù)傳回結(jié)果,我們可以在回調(diào)函數(shù)中進(jìn)行下面的工作。

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

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

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

目前Jscex主要包括以下幾點(diǎn)功能:

JIT編譯器:在運(yùn)行時(shí)動(dòng)態(tài)編譯代碼,主要用于開發(fā)環(huán)境。

AOT編譯器:在執(zhí)行前靜態(tài)編譯代碼。靜態(tài)編譯后的代碼可以脫離JIT編譯器執(zhí)行,因此主要用于生產(chǎn)環(huán)境。

異步編程庫(kù):基于Jscex生成的monadic代碼,大大簡(jiǎn)化JavaScript下的異步編程難度。

異步編程的重要性不言而喻,對(duì)于JavaScript來說更是如此。JavaScript并沒有提供任何能夠阻塞代碼執(zhí)行過程的機(jī)制,任何一個(gè)“耗時(shí)”的操作都必須寫成異步的模式。傳統(tǒng)的異步操作會(huì)在完成時(shí)通過回調(diào)函數(shù)傳回結(jié)果,我們可以在回調(diào)函數(shù)中進(jìn)行下面的工作。

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

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

后來,官網(wǎng)幫這個(gè)tab插件擴(kuò)展了一個(gè)自動(dòng)切換的功能,只需要這樣寫就行:

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

擴(kuò)展的代碼如下:

  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); 

依然是那么費(fèi)解的代碼!在官方?jīng)]有擴(kuò)展之前,我們可以用Jscex介樣子實(shí)現(xiàn):

  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沒有對(duì)JqueryUI做任何介入,Jscex只是外部控制的一層殼。這樣無法對(duì)測(cè)試出Jscex是否能與沖突或者異常,那么,我們就來用Jscex重寫官方的擴(kuò)展方法吧!

  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); 

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

***的Jscex 庫(kù),請(qǐng)上https://github.com/JeffreyZhao/jscex或者h(yuǎn)ttp://www.sndacode.com/projects/jscex/wiki下載吧····

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

【系列文章】

  1. Jscex模擬重力場(chǎng)與google蘋果logo的比較
  2. JavaScript異步編程之用Jscex畫圓
  3. 使用Jscex改善JavaScript異步編程體驗(yàn)
  4. jQuery異步調(diào)用頁(yè)面后臺(tái)實(shí)例分析
  5. 一道面試題引發(fā)的面壁:認(rèn)識(shí)JavaScript的settimeout和異步
責(zé)任編輯:陳貽新 來源: zhanglei的博客
相關(guān)推薦

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

2012-10-29 13:25:54

JavaScriptJSjQuery

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異步編程

2021-06-02 09:01:19

JavaScript 前端異步編程

2011-11-11 15:47:22

JavaScript

2012-03-01 20:32:29

iOS

2011-11-10 15:43:23

JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品久久久一区 | 一区二区三区福利视频 | 能看的av网站 | 亚洲精品一区二区在线观看 | 岛国av一区二区三区 | 在线一区 | 综合五月婷 | 国产精品.xx视频.xxtv | 久久这里有精品 | 性生生活大片免费看视频 | 日韩欧美一区在线 | 国产精品一区久久久 | 国产一区二区三区久久久久久久久 | 国产精品久久99 | 亚洲欧美日韩精品久久亚洲区 | 国产大片黄色 | 国产精品视频播放 | 51ⅴ精品国产91久久久久久 | 福利久久 | yeyeav| 青青草视频免费观看 | 国产福利资源在线 | 97精品超碰一区二区三区 | 国产蜜臀97一区二区三区 | 国产精品久久久久久久久久久久 | 国产免费一区二区 | 91久久精品国产 | 九九热在线视频免费观看 | 黄在线免费观看 | 麻豆精品久久久 | 不卡一区二区三区四区 | 男人天堂999 | 亚洲夜夜爽 | 丝袜一区二区三区 | 久久9热 | 超碰日本 | 亚洲一区中文字幕在线观看 | 亚洲一区二区三区四区五区中文 | 看片91 | 性色av一区二区三区 | 国产91久久久久久久免费 |