jquery插件实战教程,明河已经发了三篇教程:
上一篇Colortip难点解析,明河主要讲解了如何使用border生成三角图形,其实这部分并不是jquery插件必须的内容,最关键还是第二篇教程关于jquery插件基础解析,特别是下面这个jquery插件模板:
- (function($){
- $.fn.插件名 = function(settings){
- var defaultSettings = {
- }
- /* 合并默认参数和用户自定义参数 */
- settings = $.extend({},defaultSettings,settings);
- return this.each(function(){
- });
- }
- })(jQuery);
接下来的教程重要讲解Colortip的代码实现。
1、设置参数
- var defaultSettings = {
- //颜色
- color : 'yellow',
- //延迟
- timeout : 500
- }
- /* 合并默认参数和用户自定义参数 */
- settings = $.extend({},defaultSettings,settings);
我们需要提供2个参数:颜色和隐藏提示框的延迟时间。当然你可以提供更多的配置参数给用户。
2、创建个包含所有颜色信息的数组
- //提示框的颜色
- var supportedColors = ['red','green','blue','white','yellow','black'];
3、定时器
我们需要一个定时器,这个定时器用途在于,当你鼠标移开目标容器时,多久隐藏提示框。
- /*
- / 定时器类
- */
- function eventScheduler(){}
- eventScheduler.prototype = {
- set : function (func,timeout){
- //添加定时器
- this.timer = setTimeout(func,timeout);
- },
- clear: function(){
- //清理定时器
- clearTimeout(this.timer);
- }
- }
这里需要你具备javascript面向对象编程方面的一些知识。
eventScheduler类很简单,只有二个方法,set():添加定时器,clear ():清理定时器
4、创建提示框类
- /*
- / 提示类
- */
- function Tip(txt){
- this.content = txt;
- this.shown = false;
- }
- Tip.prototype = {
- generate: function(){
- //产生提示框
- return this.tip || (this.tip = $('<span class="colorTip">'+this.content+
- '<span class="pointyTipShadow"></span><span class="pointyTip"></span></span>'));
- },
- show: function(){
- //显示提示框
- if(this.shown) return;
- this.tip.css('margin-left',-this.tip.outerWidth()/2).fadeIn('fast');
- this.shown = true;
- },
- hide: function(){
- //隐藏提示框
- this.tip.fadeOut();
- this.shown = false;
- }
- }
Tip也是个javascript类,具有三个方法:generate、show、hide。
值得一提的是,Tip和eventScheduler类是在$.fn.colorTip函数体外。
5、Colortip具体的代码实现
1)实例化Tip和eventScheduler类
- // 实例化eventScheduler(定时器)
- var scheduleEvent = new eventScheduler();
- //实例化Tip(提示类,产生、显示、隐藏)
- var tip = new Tip(elem.attr('title'));
2)产生提示框,将提示框加入到目标容器
- // 产生提示框,并给提示框父容器添加样式
- elem.append(tip.generate()).addClass('colorTipContainer');
3)检查目标容器是否有颜色样式
- var hasClass = false;
- for(var i=0;i<supportedColors.length;i++)
- {
- if(elem.hasClass(supportedColors[i])){
- hasClass = true;
- break;
- }
- }
我们只需给没有颜色样式的目标容器,加入默认的颜色样式(黄色)。
4)给目标容器添加鼠标滑过事件
- elem.hover(function(){
- tip.show();
- //清理定时器
- scheduleEvent.clear();
- },function(){
- //启动定时器
- scheduleEvent.set(function(){
- tip.hide();
- },settings.timeout);
- });
鼠标滑过目标容器时显示提示框,并清理定时器;当鼠标移开时启动定时器。
6、完整代码如下
- (function($){
- $.fn.colorTip = function(settings){
- var defaultSettings = {
- //颜色
- color : 'yellow',
- //延迟
- timeout : 500
- }
- //提示框的颜色
- var supportedColors = ['red','green','blue','white','yellow','black'];
- /* 合并默认参数和用户自定义参数 */
- settings = $.extend(true,defaultSettings,settings);
- return this.each(function(){
- var elem = $(this);
- // 如果该对象不包含title属性,直接予以返回
- if(!elem.attr('title')) return true;
- // 实例化eventScheduler(定时器)
- var scheduleEvent = new eventScheduler();
- //实例化Tip(提示类,产生、显示、隐藏)
- var tip = new Tip(elem.attr('title'));
- // 产生提示框,并给提示框父容器添加样式
- elem.append(tip.generate()).addClass('colorTipContainer');
- // 检查提示框父容器是否有颜色样式
- var hasClass = false;
- for(var i=0;i<supportedColors.length;i++)
- {
- if(elem.hasClass(supportedColors[i])){
- hasClass = true;
- break;
- }
- }
- // 如果没有,使用默认的颜色
- if(!hasClass){
- elem.addClass(settings.color);
- }
- // 鼠标滑过提示框父容器时,显示提示框
- // 鼠标移出,则隐藏
- elem.hover(function(){
- tip.show();
- //清理定时器
- scheduleEvent.clear();
- },function(){
- //启动定时器
- scheduleEvent.set(function(){
- tip.hide();
- },settings.timeout);
- });
- //删除title属性
- elem.removeAttr('title');
- });
- }
- /*
- / 定时器类
- */
- function eventScheduler(){}
- eventScheduler.prototype = {
- set : function (func,timeout){
- //添加定时器
- this.timer = setTimeout(func,timeout);
- },
- clear: function(){
- //清理定时器
- clearTimeout(this.timer);
- }
- }
- /*
- / 提示类
- */
- function Tip(txt){
- this.content = txt;
- this.shown = false;
- }
- Tip.prototype = {
- generate: function(){
- //产生提示框
- return this.tip || (this.tip = $('<span class="colorTip">'+this.content+
- '<span class="pointyTipShadow"></span><span class="pointyTip"></span></span>'));
- },
- show: function(){
- //显示提示框
- if(this.shown) return;
- this.tip.css('margin-left',-this.tip.outerWidth()/2).fadeIn('fast');
- this.shown = true;
- },
- hide: function(){
- //隐藏提示框
- this.tip.fadeOut();
- this.shown = false;
- }
- }
- })(jQuery);
至此Colortip的代码讲解全部结束,Colortip有个优点就是能够自由控制提示框颜色,但Colortip存在不少的局限性,只能满足基本的应用,下篇教程将对其局限性进行详述,从而进入进阶篇。

学习了,管用
传说中的javascript最佳实践,顶
非常感谢你的分享
你好!平时看网上的教程都是一头雾水,这几天无意间进入你的网站 看了几篇教程 感觉思路都很清晰 真是受教了 感谢! 这里有个问题 看到Tip.prototype={generate: function(){}} generate函数里的this.tip是什么意思?不加this.tip 直接return那串tpl行吗?