jquery插件实战教程

制作jquery文字提示插件—jquery插件实战教程(1)

很多朋友向明河请教如何写jquery插件,今天在浏览tutorialzine时候有篇教程讲解如何写个jquery文字提示插件,这插件很简单,很适合用于讲解jquery插件机制,明河也借此抛砖引玉先讲解具体一个插件,这个插件名为:Colortip,然后在下篇教程讲解jquery插件机制。

效果如下图,鼠标滑过链接出现文字提示,提示框的背景颜色可以自由控制。

制作教程

一、功能讲解
  • 1、鼠标经过带有”title”属性的容器,出现title中的内容(一般是链接、图片)
  • 2、可以控制提示框的背景颜色
二、创建html结构
  1. <a href="http://www.36ria.com/2741" class="blue" title="推荐9个jquery手风琴菜单插件">推荐9个jquery手风琴菜单插件</a>

最重要的是title属性,此属性用于控制提示框出现的内容。
class=”blue”用于控制提示框的背景颜色。
当你第一次滑过该容器时,会创建如下提示框容器:

  1. <a class="blue colorTipContainer" href="http://www.36ria.com/2741">推荐9个jquery手风琴菜单插件 
  2.   <span class="colorTip" style="margin-left: -60px;">推荐9个jquery手风琴菜单插件
  3.  
  4.  <span class="pointyTipShadow"></span> 
  5.  
  6.  <span class="pointyTip"></span> 
  7.  
  8.  </span> 
  9. </a>

css部分的内容不是讲解关键,明河予以略过。

三、插件代码colortip-1.0-jquery.js
  1. (function($){
  2.     $.fn.colorTip = function(settings){
  3.  
  4.         var defaultSettings = {
  5.             //颜色
  6.             color        : 'yellow',
  7.             //延迟
  8.             timeout        : 500
  9.         }
  10.         //提示框的颜色
  11.         var supportedColors = ['red','green','blue','white','yellow','black'];
  12.        
  13.         /* 合并默认参数和用户自定义参数 */
  14.         settings = $.extend(defaultSettings,settings);
  15.        
  16.         return this.each(function(){
  17.  
  18.             var elem = $(this);
  19.            
  20.             // 如果该对象不包含title属性,直接予以返回
  21.             if(!elem.attr('title')) return true;
  22.            
  23.             // 实例化eventScheduler(定时器)           
  24.             var scheduleEvent = new eventScheduler();
  25.             //实例化Tip(提示类,产生、显示、隐藏)
  26.             var tip = new Tip(elem.attr('title'));
  27.  
  28.             // 产生提示框,并给提示框父容器添加样式
  29.            
  30.             elem.append(tip.generate()).addClass('colorTipContainer');
  31.  
  32.             // 检查提示框父容器是否有颜色样式
  33.            
  34.             var hasClass = false;
  35.             for(var i=0;i<supportedColors.length;i++)
  36.             {
  37.                 if(elem.hasClass(supportedColors[i])){
  38.                     hasClass = true;
  39.                     break;
  40.                 }
  41.             }
  42.            
  43.             // 如果没有,使用默认的颜色
  44.            
  45.             if(!hasClass){
  46.                 elem.addClass(settings.color);
  47.             }
  48.            
  49.             // 鼠标滑过提示框父容器时,显示提示框
  50.             // 鼠标移出,则隐藏
  51.            
  52.             elem.hover(function(){
  53.  
  54.                 tip.show();
  55.                
  56.                 //清理定时器
  57.                
  58.                 scheduleEvent.clear();
  59.  
  60.             },function(){
  61.  
  62.                 //启动定时器
  63.                
  64.                 scheduleEvent.set(function(){
  65.                     tip.hide();
  66.                 },settings.timeout);
  67.  
  68.             });
  69.            
  70.             //删除title属性
  71.             elem.removeAttr('title');
  72.         });
  73.        
  74.     }
  75.  
  76.  
  77.     /*
  78.     /    定时器类
  79.     */
  80.  
  81.     function eventScheduler(){}
  82.    
  83.     eventScheduler.prototype = {
  84.         set    : function (func,timeout){
  85.             //添加定时器
  86.             this.timer = setTimeout(func,timeout);
  87.         },
  88.         clear: function(){
  89.             //清理定时器
  90.             clearTimeout(this.timer);
  91.         }
  92.     }
  93.  
  94.  
  95.     /*
  96.     /    提示类
  97.     */
  98.  
  99.     function Tip(txt){
  100.         this.content = txt;
  101.         this.shown = false;
  102.     }
  103.    
  104.     Tip.prototype = {
  105.         generate: function(){
  106.             //产生提示框
  107.            
  108.             return this.tip || (this.tip = $('<span class="colorTip">'+this.content+
  109.                                              '<span class="pointyTipShadow"></span><span class="pointyTip"></span></span>'));
  110.         },
  111.         show: function(){
  112.             //显示提示框
  113.             if(this.shown) return;
  114.             this.tip.css('margin-left',-this.tip.outerWidth()/2).fadeIn('fast');
  115.             this.shown = true;
  116.         },
  117.         hide: function(){
  118.             //隐藏提示框
  119.             this.tip.fadeOut();
  120.             this.shown = false;
  121.         }
  122.     }
  123.    
  124. })(jQuery);

关键代码注释明河已经翻译了,插件的制作思路,明河将在接下来的教程详解。

四、jquery插件模板

jquery插件是有固定的模板的,你大概大部分的jquery插件源码,会发现都有一套固定模板。
模板如下:

  1. (function($){
  2.     $.fn.插件名= function(settings){
  3.                 //默认参数
  4.         var defaultSettings = {
  5.  
  6.         }
  7.        
  8.         /* 合并默认参数和用户自定义参数 */
  9.         settings = $.extend(defaultSettings,settings);
  10.        
  11.         return this.each(function(){
  12.  
  13.         });
  14.        
  15.     }
  16.    
  17. })(jQuery);

这是最基础的jquery插件结构,明河将在下一篇教程详解jquery的插件机制。(转载)

 查看更多,请参阅 个人工作站:在这里网-前端技术博客

转载于:https://www.cnblogs.com/developering/archive/2013/01/24/jquery%e7%bc%96%e5%86%99%e6%8f%92%e4%bb%b6.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值