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

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

创新互联自2013年创立以来,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元云和做网站,已为上家服务,为云和各地企业和个人服务,联系电话:18982081108

我们使用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下载。

本文名称:JS异步编程三:Jscex无创痕切入jQUI
当前地址:http://www.csdahua.cn/qtweb/news34/238934.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网