编写自己的jQuery提示框(Tip)插件


Posted in Javascript onFebruary 05, 2015

对jQuery相信很多同学和我一样平时都是拿来主义,没办法,要怪只能怪jQuery太火了,各种插件基本能满足平时的要求。但是这毕竟不是长久之道,古人云:“授之以鱼,不如授之以渔”。

为了方便之前没有接触的同学,先来回顾一下jQuery的插件机制吧。

//添加check和uncheck插件

jQuery.fn.extend({

  check: function() {

    return this.each(function() { this.checked = true; });

  },

  uncheck: function() {

    return this.each(function() { this.checked = false; });

  }

});

//插件的使用

$("input[type=checkbox]").check();

$("input[type=radio]").uncheck();

其实jQuery的插件非常简单,怪不得jQuery插件满天飞,之前是我想复杂了,总觉得写插件是很高深的事情,不知道有没有同感的同学。

动手之前先来做一下需求分析吧(ps:哥是学软件工程出生的学费很坑爹啊,不搞搞需求分析对不起学费啊,呵呵)。

其实也没啥好分析的就是做出如下效果:

鼠标放上去的时候弹出微信扫一扫,微信太火了,老板让网站上放一个,所以哥写了个插件满足一下他,发工资就是上帝,给钱干活,不要给我谈节操,it宅男都是三观尽毁,节操全无的。扯远了。看效果图吧。

编写自己的jQuery提示框(Tip)插件

使用方法其他jQuery没什么不同:

$(function(){

    var t = $(".weixin").Tip({

        title:'微信扫一扫',

        content:'<img src="img/weixin.jpg" width="160px" height="160px;">',

        html:true,

        direction:'bottom'

        });

    t.bind({

        mouseover:function(){

            t.Tip("show");    

        },

         mouseout:function() {

            t.Tip("hide");

        }

    });

});

看一下可配置的选项吧

defaultOptions :{

            title : '',//标题

            content : '',//内容

            direction : 'bottom',//弹出反向,相对于选中元素

            html : false,//是否允许内容为html元素

            template : '<div class="tip"><div class="tip-inner"><h3></h3><div class="tip-container"></div></div></div>'//弹出框模版

        }

最后上高清无码源码有兴趣的看看,没兴趣的ctrl+c,ctrl+v吧

!function($){

    var Tip = function(element, options){

        this.init(element, options);

    }

    Tip.prototype = {

        constructor : Tip,

        init : function(element, options){

            this.element = $(element);

            this.options = $.extend({},this.defaultOptions,options);

        },

        show : function() {

            if (!this.tip) {

                this.tip = this.getTip();

                var title = this.tip.find("h3"),

                    container = this.tip.find(".tip-container");

                //设置标题

                title.text(this.options.title);

                //设置内容

                if (this.options.html) {

                    container.html(this.options.content);

                } else {

                    container.text(this.options.content);

                }

                //添加tip到body

                $("body").append(this.tip);

                //计算tip的位置

                var eLeft = this.element.offset().left,

                    eTop = this.element.offset().top,

                    eWidth = this.element.innerWidth(),

                    eHeight = this.element.innerHeight(),

                    tipw = this.tip[0].offsetWidth,

                    tiph = this.tip[0].offsetHeight,

                    top,

                    left;

                switch(this.options.direction) {

                case 'top' :

                    top = eTop - tiph;

                    left = (eLeft - tipw/2) + eWidth/2;

                    this.tip.css({top: top, left: left});

                    break;

                case 'left' :

                    top = (eTop - tiph/2) + eHeight/2;

                    left = eLeft - tipw;

                    this.tip.css({top: top, left: left});

                    break;

                case 'bottom' :

                    top = eTop + eHeight;

                    left = (eLeft - tipw/2) + eWidth/2;

                    this.tip.css({top: top, left: left});

                    break;

                case 'right' :

                    top = (eTop - tiph/2) + eHeight/2;

                    left = eLeft + eWidth;

                    this.tip.css({top: top, left: left});

                    break;

                default:

                    break;

                }

            } else {

                this.tip.css({display:'block'});

            }

        },

        hide : function() {

            this.getTip().css({display:"none"});

        },

        getTip : function() {

            return this.tip ? this.tip : $(this.options.template);

        },

        detach : function() {

        },

        defaultOptions :{

            title : '',

            content : '',

            direction : 'bottom',

            html : false,

            template : '<div class="tip"><div class="tip-inner"><h3></h3><div class="tip-container"></div></div></div>'

        }

    }

    $.fn.Tip = function(option) {

        return this.each(function(){

            var e = $(this),

                data = e.data('tip'),

                options = typeof option == "object" && option;

            if (!data) e.data("tip", new Tip(this,options));

            if (typeof option == 'string') data[option]();

        });

    }

}(window.jQuery);

css样式

.tip {

  position: absolute;

  padding: 3px;

  background: #efefef;

  border-radius: 2px;

  top: 0px;

  left: 0px;

}

.tip .tip-inner {

  background: #fafafb;

  border: 1px solid #d8d8d8;

}

.tip .tip-inner h3 {

  font-size: 14px;

  padding: 5px;

  border-bottom: 1px solid #eee;

}

.tip .tip-inner .tip-container {

  padding: 5px;

}

以上就是本文的所有内容了,小伙伴们对如何编写jQuery插件是否有了新的 认识了呢,希望大家能够喜欢本文。

Javascript 相关文章推荐
jQuery textarea的长度进行验证
May 06 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
根据配置文件加载js依赖模块
Dec 29 Javascript
JS实现页面超时后自动跳转到登陆页面
Jan 19 Javascript
jQuery制作仿Mac Lion OS滚动条效果
Feb 10 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
Oct 08 Javascript
ES6记录异步函数的执行时间详解
Aug 31 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
详解webpack打包vue时提取css
May 26 Javascript
Windows安装Node.js报错:2503、2502的解决方法
Oct 25 Javascript
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 Javascript
使用pjax实现无刷新更改页面url
Feb 05 #Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 #Javascript
jquery手风琴特效插件
Feb 04 #Javascript
Jquery中find与each方法用法实例
Feb 04 #Javascript
javascript中Array数组的迭代方法实例分析
Feb 04 #Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 #Javascript
15款jQuery分布引导插件分享
Feb 04 #Javascript
You might like
php生成WAP页面
2006/10/09 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
php常见的魔术方法详解
2014/12/25 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
日期 时间js控件
2009/05/07 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
在线服装零售商:SheIn
2016/07/22 全球购物
司法所长先进事迹
2014/06/02 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
撤诉申请怎么写
2015/05/19 职场文书
python实现三次密码验证的示例
2021/04/29 Python
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL