jQuery插件开发指南

jQuery是一个快速、小巧、功能丰富的JavaScript库。它简化了HTML文档遍历、事件处理、动画和Ajax交互。jQuery还提供了一种机制,允许为核心模块添加方法和额外的功能。通过这种机制,可以创建新的代码部分,并在不同的页面和项目中重用它。

编写第一个jQuery插件

要编写一个插件,需要在jQuery.fn对象中添加一个新的属性,属性的名称将是插件的名称。

(function($) { $.fn.myPlugin = function() { // 在这里编写插件代码 }; })(jQuery);

让开始为插件添加功能,并在网页中使用它。在第一个例子中,将简单地使元素淡出。

(function($) { $.fn.myPlugin = function() { this.fadeOut('normal'); }; })(jQuery);

现在,将文件保存为“jquery-myPlugin.js”,插件就可以使用了。在页面上创建一个HTML按钮和div。点击按钮时,div将淡出。

插件对多个元素的操作

也可以编写一个对一组元素执行操作的插件。假设想要在鼠标悬停时改变元素的背景颜色。简单地获取每个元素并为该对象注册悬停事件。让开始编写悬停插件的代码。

(function($) { $.fn.hoverElement = function() { this.each(function() { $(this).hover( function() { $(this).addClass('hoverTextSel'); }, function() { $(this).removeClass('hoverTextSel'); } ); }); }; })(jQuery);

$(selector).each()方法用于遍历一个jQuery对象、数组或任何集合。这个例子为jQuery对象的每个元素注册了悬停事件。

链式调用

jQuery设计之美在于它保持了链式调用。可以在一系列操作中执行多个动作。因此,为了在插件中保持链式调用,必须确保插件返回'this'关键字。

(function($) { $.fn.hoverElement = function() { return this.each(function() { $(this).hover( function() { $(this).addClass('hoverTextSel'); }, function() { $(this).removeClass('hoverTextSel'); } ); }); }; })(jQuery);

现在可以在一系列操作中执行多个动作。

$(".hoverText2").hoverElement().css({ 'color': 'red' });

自定义

如果想将插件商业化,那么它应该是可配置的。例如,应该提供更改图片、宽度、高度等的选项。所以用户可以根据需要更改外观和感觉。

为了解释这个概念,这个例子将允许用户在悬停时更改文本、前景色和背景。用户可以根据自己的需求自定义设置。现在插件方法将有一个参数,用户可以在调用方法时传递设置。

$.fn.YourPlugin = function(options) {...}

还需要有一个默认设置对象,它将包含默认值。

var defaultVal = { Text: 'Your mouse is over', ForeColor: 'red', BackColor: 'gray' };

在那个时候,有两个不同的对象,一个是用户传递的,第二个是默认值。将使用jQuery提供的extend方法合并这两个对象。

var obj = $.extend(defaultVal, options);

extend()方法将两个或更多对象的内容合并到第一个对象中。合并两个对象后,将有一个最终的对象,它将用于设置。插件的完整代码如下:

(function($) { $.fn.textHover = function(options) { var defaultVal = { Text: 'Your mouse is over', ForeColor: 'red', BackColor: 'gray' }; var obj = $.extend(defaultVal, options); return this.each(function() { var selObject = $(this); var oldText = selObject.text(); var oldBgColor = selObject.css("background-color"); var oldColor = selObject.css("color"); selObject.hover( function() { selObject.text(obj.Text); selObject.css("background-color", obj.BackColor); selObject.css("color", obj.ForeColor); }, function() { selObject.text(oldText); selObject.css("background-color", oldBgColor); selObject.css("color", oldColor); } ); }); } })(jQuery);

高级图片库

将创建一个插件,它非常接近Lightbox插件。Lightbox是一个非常著名的图片插件。基本上,当页面上显示图片时,为用户提供了一个非常方便的可能性。点击(小)缩略图将使图片越来越大,直到达到原始尺寸,并在找到较小图片的同一页面上以全尺寸显示!

获取所有的锚点(

$(document).ready(function() { $("#myGallery a").imageGallery2(); });

插件获取集合,并为每个元素注册点击事件,点击事件后,它会在页面上添加一些元素。添加后,它设置图片源、动画,并在这些元素上注册事件。

在示例中,在显示图片之前预加载全尺寸图片。首先,创建一个图片对象并注册图片对象的onload方法。然后从点击的对象获取图片源,并分配图片源到图片对象。

// 预加载图片以显示 var objImagePreloader = new Image(); var url = objClick.getAttribute('href'); var imageCaption = objClick.getAttribute('title'); objImagePreloader.onload = function() { $("#imageGallery2-image").attr('src', url); // 执行图片容器调整大小的效果 resizeImageContainer(objImagePreloader.width, objImagePreloader.height); // 清除onLoad,IE在处理动画GIF时行为异常 objImagePreloader.onload = function() { }; }; objImagePreloader.src = url; function CloseSelectedImage() { $("#imageGallery2-image-text-box").hide(); $("#imageGallery2-image-container").animate({ width: 0, height: 0 }, 300, function() { $("#imageGallery2-overlay").remove(); $("#imageGallery2-wrapper").remove(); }); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485