jquery 插件 开发_开发jQuery插件简介

jquery 插件 开发

本文由Mark BrownJulian Motz进行了同行评审。 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态!

您以前可能已经处理过交互式组件,例如滑块,画廊或交互式表单。 尽管您可能逐个站点地创建它们,但是节省时间的一个好方法是将您的功能构建为jQuery插件来加快开发速度。

jQuery插件可让您定义一次功能,然后根据需要将其放入您的项目中,从而使您的启动和运行速度更快。

我们将研究如何构建自己的jQuery插件。 我们将立即查看您需要了解的所有方面,以帮助您启动并运行构建插件。

我们将使用我创建的名为fancytoggle的插件来展示插件的不同部分。 它是一个简单的插件,用于切换诸如列表项之类的嵌套元素的可见性,以为诸如FAQ之类的内容创建手风琴式小部件。 总体思路与插件的概念有关,但是此示例应帮助您了解其在实践中的工作方式。

请参阅CodePen上的SitePoint( @SitePoint )的Pen FancyToggle

插件方法:优势

这里的核心概念是创建可扩展的东西,您可以将其添加到项目中以提供快速功能。 jQuery的插件功能简化了构建可重用代码的过程。

这些插件的优点之一是,它们使开发人员可以定义几个可用于自定义功能的选项。 您可以创建多个选项来更改插件的整体操作方式,或者可以定义一些选项来为用户提供更多的样式或布局控制。 使用插件时,此选择将​​取决于您。

开发jQuery插件

让我们完成注册新jQuery插件所需的步骤。 我们将使用示例插件fancyToggle ,以便您可以看到它们如何组合在一起。

用$ .fn创建函数

jQuery插件通过使用您要调用的名称来注册一个函数来触发插件来工作(例如,当您想要返回宽度/高度时,您调用jQuery的内置.width().height()函数)

我们将函数附加到jQuery的$.fn对象,以使其可用于全局$对象。 这将注册我们的函数,并使其在对象或选择上被调用。

//registering our function
$.fn.fancytoggle = function(){
  // ...
};

这里的所有都是它的! 现在,您有了一个可以从jQuery的$对象调用的新方法。 现在,它什么也不会做,但是您可以在任意位置调用此方法,例如在选择器上:

//Call fancytoggle on this element
$('.my-element').fancytoggle();

您可以使用$.fn注册$.fn ,但是最好的做法是避免注册多个函数,除非插件执行明显不同的任务。

多个集合和循环

需要了解的重要一点是,在调用插件时,它可能会将自身应用于单个元素或多个元素。 例如,对于我们的插件,如果我们将fancytoggle()应用于多个不同的项目,我们将在我们的函数中处理一个集合。

要处理每个元素,我们只需要使用jQuery的$.each函数遍历整个集合:

$.fn.fancytoggle = function(options) {
  // `this` refers to the jQuery elements your plugin is called on
  this.each(function(index, value){
    // the rest of your plugins functionality here
  });

  return this;
};

我们遍历集合的每个元素并进行设置。 我们可能正在执行计算,添加事件侦听器或以某种方式使用我们的元素。 这是$.each ,确保我们引用的是正确的元素。

返回对象/链接

大多数时候,您的插件可以通过直接在对象或选择器上调用来工作。 这将针对此项目执行插件的功能。

jQuery的功能之一是chaining的概念,您可以在一个项目上背靠背调用多个方法,每个方法将按顺序执行:

// Chaining several jQuery methods on a selector
$('.my-element')
  .addClass('active')
  .slideToggle('fast');

免费学习PHP!

全面介绍PHP和MySQL,从而实现服务器端编程的飞跃。

原价$ 11.95 您的完全免费

这将选择一个元素,添加一个活动类,然后将其向上或向下滑动。 每个方法返回一个对象,然后调用下一个方法。

要使我们的插件以这种方式工作,所需要做的就是在插件功能的末尾返回该项目。 尽管从技术上讲它不是必需的,但强烈建议您这样做。

// defining our plugin function and returning it
$.fn.fancytoggle = function() {
  // ...
  return this;
};

创建选项和配置

插件可以通过一系列选项来改变它们的工作方式。 这些选项作为一系列键/值对(JavaScript对象)传递给您的函数:

// apply fancyToggle to this element (and customize our values)
$('.my-element').fancytoggle({
  openSpeed: 300,
  closeSpeed: 600,
});

为了使我们的插件能够处理选项,我们需要定义要使用的默认设置。 然后,我们可以使用jQuery的$.extend方法将默认选项与调用插件时传递的选项合并:

$.fn.fancytoggle = function(options) {
  // default arguments 
  options = $.extend({
    openSpeed: 400,
    closeSpeed: 400,
    easing: 'linear',
    // all your options here
  }, options);

  // ...

  return this;
}

您可以为插件定义任意数量的选项, $.extend将通过合并和收集值来创建单个对象。 您可能需要包括一些基本设置或其他元素,以帮助插件进行自我配置。

对于我们的插件,我们提供了几个选项来定义插件的工作方式。 例如,我们希望用户能够根据需要切换任意多个打开的区域。 但是,我们可以选择让他们一次仅切换一个部分(关闭其他部分)。 在切换功能期间,我们检查是否应基于此设置关闭其他项目。

options = $.extend({
  singleItemOpen: false,
}, options);

// later on in our toggle function
if (options.singleItemOpen === true) {
  var $activePanel = $item.siblings('.active');
  animate($activePanel, 'data-min-height', 'data-close-speed');
}

事件监听器

事件监听器是在插件生命周期的特定时刻调用的函数。 这些回调将使其他人(或您)挂接到插件的关键部分并触发其他功能。

许多以开发人员为中心的jQuery插件都有回调,您可以将其链接到其中,例如,在单击幻灯片或关闭模式窗口时。

您可以将这些回调定义为默认选项中的元素。 首先添加这些事件名称并将其值设置为空函数:

options = $.extend({
  // ...,
  onItemClick: function(){},
  onItemOpen: function(){},
  onItemClose: function(){}
}, options);

jQuery没有使用所有这些空函数,而是提供了$.noop函数。 这做同样的事情,但是避免了创建多个匿名函数的开销。

options = $.extend({
    onItemClick: $.noop,
    onItemOpen: $.noop,
    onItemClose: $.noop
}, options);

一旦组织好设置,就可以在发生回调的地方构建功能。

回调通过在触发时调用您的选项来工作。 例如,在我们的插件中,我们具有onItemClick回调,每次有人单击切换项时,我们都会触发该回调。 我们使用.call方法来触发事件监听器(如果已设置)。

让我们看一下它的外观:

// called when we click on any of our toggle items
function toggle($item, event){

    // trigger the event listener
    options.onItemClick.call(null, $item, event); 

});

这是在切换项目时传递三个参数。 第一个参数为null :我们这样做是为了在以后扩展回调时不必担心this的值。

我们的第二个参数是$item (切换元素):这很重要,因为它使回调函数可以访问项目本身。

最后,我们的第三个参数是event (事件本身)。

事件侦听器将有权访问$itemevent并能够自定义功能。 例如,如果我们想在单击时删除该元素:

$('.my-element').fancytoggle({
    // on click, remove item and log it
    onItemClick: function($item, event){
        $item.remove(); 
        console.log('Removed this item!'); 
    }
});

这是事件如此多才多艺的原因之一。 他们可以在关键时刻使开发人员可以访问您的插件,以便他们可以扩展或修改它以满足他们的需求。

渐进增强

要考虑的一件事是禁用JS时会发生什么。 没有它,我们的插件将无法工作,我们将一开始便留下任何HTML内容。

对于我们的示例,我们将创建带有标题和内容主体的可切换部分(单击标题以上下切换主体)。 如果我们没有启用JS,我们的内容仍然可以完美运行。

考虑这些情况总是很重要的。

然后去哪儿?

扩展知识

使用我们已经介绍的基础知识,您可以将这些概念应用于现有代码,将其转变为易于配置和扩展的插件,您可以将其放入下一个项目。 关于插件开发,这里有很多知识。 jQuery网站本身有几个关于插件开发的部分 ,值得一读。

深入了解插件

扩展知识的最好方法是浏览实际jQuery插件的代码或尝试创建自己的jQuery插件。 只有在摆弄之后,您才能看到如何利用这些插件来节省时间。

今天讨论的我们的fancytoggle插件可以在我们的CodePen帐户中找到。 随意分叉并尝试不同的配置。 您可能要尝试以下操作:

  • 向默认参数添加新选项(并覆盖它们)
  • 向插件添加其他事件,例如在切换区域调整大小或插件初始化之后。
  • 使用现有事件来扩展插件的功能,例如,在打开一个节时触发淡入动画,然后在关闭时使其淡入淡出。

总结:您应该学习的知识

您现在应该掌握什么是jQuery插件,以及如何利用它们来使开发更快,更轻松。 以下是我们涵盖的内容的细分:

  • 使用$.fn将插件添加到jQuery的命名空间
  • 通过使用.each遍历多个集合来处理它们
  • 如何创建可链接方法(并正确返回以保持一致性)
  • 如何创建默认选项并将其与传入的自定义值合并
  • 事件回调如何使开发人员轻松访问插件功能的重要部分
  • 简要介绍了渐进增强功能(有关何时不使用JS的注意事项)

您是否创建了自己的插件? 您想分享一些有关插件开发的技巧吗? 在评论中让我知道!

翻译自: https://www.sitepoint.com/developing-jquery-plugins/

jquery 插件 开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值