2012-03-10 64 views
1

有一点困难。尝试在插件中公开方法stop()。多个插件实例可能正在页面上运行。我希望能够做到以下几点:JQuery插件:如何暴露与实例绑定的公共方法

​​

我有以下几点:

; (function ($) { 

    $.fn.myslider = function (options) { 
     var defaults = { 
      interval: 2000 
     }; 
     var o = jQuery.extend(defaults, options); 

     return this.each(function() { 

      var slider = $(this); 

      var timer; 
      var active; 

      var rotateSwitch = function() { 
       timer = setInterval(function() { 
        active = $('.slider_active', slider).next(); 
        if (active.length === 0) { 
         active = $('.slider_paging a:first', slider); 
        } 
        rotate(); 
       }, o.interval); 
      }; 

      rotateSwitch(); 
      ... 
     }); 

    }; 
})(jQuery); 

如何将暴露,我可以要求一个特定实例的stop()方法?

+0

它究竟会做什么?在'timer'上调用'clearInterval()'? – 2012-03-10 17:25:30

+0

@lilaG是的,将清除定时器的时间间隔 – Chev 2012-03-10 18:06:57

回答

0

通常的方法是让你的插件功能接受命令字符串,例如:

$(selector).slider("stop"); 

这就是jQuery的用户界面的各种插件做,例如。所以你可以修改你的函数来测试它是否收到一个选项对象(你当前的代码)或一个命令字符串,并相应地采取行动。

在您的具体情况下,您必须将定时器值存储在相关元素中,可能使用data函数。

+0

是的,这是最好的方式 - 如果你寻找一些代码,如何实现这个很好的模式是:https://github.com/twitter/bootstrap/ blob/master/js/bootstrap-alert.js:请参阅底部的插件定义 – nav 2012-03-10 18:14:55