JS异步编程三:Jscex无创痕切入jQUI

开发 前端
很多人可能会有个疑问,Jscex和其他类库共同使用或者语法混用时,会不会出现冲突或者异常?那么我们就来做个尝试吧!

很多人可能会有个疑问,Jscex和其他类库共同使用或者语法混用时,会不会出现冲突或者异常?那么我们就来做个尝试吧!

我们使用tab插件:

  1. $(function () {  
  2. $("#tabs").tabs({ event: "mouseover" });  
  3. });  

后来,官网帮这个tab插件扩展了一个自动切换的功能,只需要这样写就行:

  1. $(function ()   
  2. {var t = $("#tabs").tabs();  
  3. t.tabs("rotate", 3000, false);  
  4. }); 

扩展的代码如下:

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

依然是那么费解的代码!在官方没有扩展之前,我们可以用Jscex介样子实现:

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

可以看得出来,这样的话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.         }); 

但是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. JS异步编程一:用Jscex画圆
  2. JS异步编程二:自由落体
  3. JS异步编程四:Jscex+jQ打造游戏力度条
  4. JS异步编程五:Jscex制作愤怒的小鸟
  5. 看JavaScript如何实现页面自适
责任编辑:张伟 来源: 当耐特砖家的博客
相关推荐

2011-11-11 13:38:39

Jscex

2012-06-14 13:40:04

JavaScript

2012-06-14 14:42:42

JavaScript

2012-06-14 14:09:58

JavaScript

2011-11-10 10:23:56

Jscex

2011-07-27 14:10:43

javascript

2011-11-16 13:22:38

Jscex

2011-11-17 16:14:25

Jscex

2012-06-14 13:55:39

JavaScript

2019-01-17 10:58:52

JS异步编程前端

2013-04-01 15:38:54

异步编程异步编程模型

2023-05-09 08:28:44

Go语言并发编程

2021-03-23 07:56:54

JS基础同步异步编程EventLoop底层

2020-10-15 13:29:57

javascript

2013-04-01 15:25:41

异步编程异步EMP

2011-10-18 10:17:13

Node.js

2011-02-22 09:09:21

.NETAsync CTP异步

2011-02-22 08:49:16

.NET同步异步

2016-09-07 20:43:36

Javascript异步编程

2017-07-13 12:12:19

前端JavaScript异步编程
点赞
收藏

51CTO技术栈公众号