编写自己的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+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
Jan 23 Javascript
js获得网页背景色和字体色的方法
Mar 21 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
JS实现的另类手风琴效果网页内容切换代码
Sep 08 Javascript
jQuery实现获取绑定自定义事件元素的方法
Dec 02 Javascript
Bootstrap CSS布局之图像
Dec 17 Javascript
原生JS实现垂直手风琴效果
Feb 19 Javascript
JavaScript数组去重的多种方法(四种)
Sep 19 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
Jul 10 Javascript
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 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代码DOS造成用光网络带宽
2011/03/01 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP线程的内存回收问题
2016/07/08 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
Mac下通过brew安装指定版本的nodejs教程
2018/05/17 NodeJs
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python实现剪切功能
2019/01/23 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
利用python实现AR教程
2019/11/20 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
写好自荐信的要点
2013/11/06 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
yy司仪主持词
2014/03/22 职场文书