编写自己的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 相关文章推荐
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
解决jquery中美元符号命名冲突问题
Jan 08 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
create-react-app构建项目慢的解决方法
Mar 14 Javascript
JS解析后台返回的JSON格式数据实例
Aug 06 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
详解微信小程序支付流程与梳理
Jul 16 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
Dec 28 Javascript
Python机器学习之决策树和随机森林
Jul 15 Javascript
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
使用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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
Open and Print a Word Document
2007/06/15 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
java必学必会之static关键字
2015/12/03 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python实现ping指定IP的示例
2018/06/04 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
python xpath获取页面注释的方法
2019/01/14 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
美容师的职业规划书
2013/12/27 职场文书
高二化学教学反思
2014/01/30 职场文书
志愿者服务感言
2014/02/27 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
年度考核表个人总结
2015/03/06 职场文书
办公室规章制度范本
2015/08/04 职场文书
Python 匹配文本并在其上一行追加文本
2022/05/11 Python
python绘制云雨图raincloud plot
2022/08/05 Python