一个简单的jQuery插件制作 学习过程及实例

2016-02-19 13:04 25 1 收藏

今天图老师小编给大家介绍下一个简单的jQuery插件制作 学习过程及实例,平时喜欢一个简单的jQuery插件制作 学习过程及实例的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - Web开发 】

打包下载

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

一,首先,制作jQuery插件需要一个闭包

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)代码如下:
(function ($) {
//code in here
})(jQuery);

这是来自jQuery官方的插件开发规范要求,使用这种编写方式有什么好处呢?
a) 避免全局依赖。
b) 避免第三方破坏。
c) 兼容jQuery操作符'$'和'jQuery '

二,有了闭包,在其中加入插件的骨架
代码如下:
$.fn.dBox = function (options) {
var defaults = {
//各种属性及其默认值
};
var opts = $.extend(defaults, options);
//function codes in here
};


在这里dBox是我为这个弹出层插件的命名

三,为dBox建立起属性及其默认值
代码如下:
$.fn.dBox = function (options) {
var defaults = {
opacity: 0.6, //for mask layer
drag: true,
title: 'dBox',
content: '',
left: 400,
top: 200,
width: 600,
height: 300,
setPos: false, //if use the customer's left and top
overlay: true, //if use the mask layer
loadStr: 'Loading',
ajaxSrc: '',
iframeSrc: ''
};
var opts = $.extend(defaults, options);
//function codes in here
};

四,既然是弹出窗体,那么要先设计好一个div窗体和遮罩层,在这里我将样式也直接写进去了,在function codes区域中输入如下:
代码如下:
//build html code of the dBox
var dBoxHtml = "div id='dBox' style='background-color:#FFF;border:solid 2px #00E;position:absolute;z-index:100;'";
dBoxHtml += "div id='d_head' style='width:100%;height:20px;border-bottom:solid 1px #00E;'";
dBoxHtml += "div id='d_title' style='float:left;width:90%;color:#00E'" + opts.title + "/div";
dBoxHtml += "div id='d_close' style='float:right;cursor:pointer;margin-right:5px;color:#00E'[x]/div";
dBoxHtml += "/div";
dBoxHtml += "div id='d_content' style='width:100%;height:100%;padding:3px;'" + opts.content + "/div";
dBoxHtml += "/div";
var dBoxBG = "iframe id='d_iframebg' style='position:absolute;top:0;left:0;width:0;height:0;border:none;'/iframediv id='d_bg' style='background-color:#000;z-index:99;position:absolute;top:0;left:0;'/div";
var loading = "div id='d_loading' style='position:fixed;top:48%;left:48%;z-index:100;border:solid 1px #000;'" + opts.loadStr + "/div";

在IE6中,z-index对下拉列表不会起作用,所以这里遮罩层中加入id为d_iframebg的iframe作为遮罩层,这样,大体已经制作好了框架。
五,现在我们考虑要实现什么功能了
首先,如何出现弹出窗体,一般都是点击,这里仍然使用点击事件
代码如下:
//click event
$(this).click(function () {
$("body").append(dBoxHtml);
//case ajax
if (opts.ajaxSrc != "") {
$("#d_content").append("div id='d_ajax' style='width:" + (opts.width - 6) + "px;height:" + (opts.height - 26) + "px;overflow:scroll;'div id='d_ajaxcontent'/div/div");
$("#d_ajaxcontent").load(opts.ajaxSrc);
}
//case iframe
else if (opts.iframeSrc != "") {
$("#d_content").append("iframe frameborder='0' width='" + (opts.width - 6) + "' height='" + (opts.height - 26) + "' src='" + opts.iframeSrc + "'");
}
addCSS();
//case drag
if (opts.drag == true) {
drag();
}
$("#d_close").click(dBoxRemove);
return false;
});

最后一个return false可以去掉浏览器默认的点击事件,如在一个a标记上绑定点击事件,将不会造成默认的跳转效果
在这个点击事件中,先将dBox的框架载入了页面,然后判断内容的加载方式,分别处理,最后有三个事件
1,addCSS()此事件处理遮罩层大小,弹出层的位置
2,drag()此事件处理弹出层的拖曳
3,dBoxRemove()此事件处理弹出层的关闭
有了这三个事件,整个插件就基本完成了

六,这里贴出如上三个事件的代码
1,addCSS():
代码如下:
//add css to the dBox
function addCSS() {
var pos = setPosition();
$("#dBox").css({ "left": pos[0], "top": pos[1], "width": opts.width + "px", "height": opts.height + "px" });
if (opts.overlay) {
var wh = getPageSize();
$(dBoxBG).appendTo("body").css({ "opacity": opts.opacity, "width": wh[0], "height": wh[1] });
}
}

在这个addCSS中,还有两个功能需要实现,以下代码:
代码如下:
//calc the size of the page to put the mask layer cover the whole document
function getPageSize() {
if ($(window).height() $(document).height()) {
h = $(window).height();
} else {
h = $(document).height();
}
w = $(window).width();
return Array(w, h);
}
//calc the position of the dBox to put the dBox in the center of current window
function setPosition() {
if (opts.setPos) {
l = opts.left;
t = opts.top;
} else {
var w = opts.width;
var h = opts.height;
var width = $(document).width();
var height = $(window).height();
var left = $(document).scrollLeft();
var top = $(document).scrollTop();
var t = top + (height / 2) - (h / 2);
var l = left + (width / 2) - (w / 2);
}
return Array(l, t);
}



2,drag():
代码如下:
//drag the dBox
//this event contains four events(handle.mousedown,move,out,up)
function drag() {
var dx, dy, moveout;
var handle = $("#dBox").find("#d_head#d_title").css('cursor', 'move');
handle.mousedown(function (e) {
//cal the distance between e and dBox
dx = e.clientX - parseInt($("#dBox").css("left"));
dy = e.clientY - parseInt($("#dBox").css("top"));
//bind mousemove event and mouseout event to the dBox
$("#dBox").mousemove(move).mouseout(out).css({ "opacity": opts.opacity });
handle.mouseup(up);
});
move = function (e) {
moveout = false;
win = $(window);
var x, y;
if (e.clientX - dx 0) {
x = 0;
} else {
if (e.clientX - dx (win.width() - $("#dBox").width())) {
x = win.width() - $("#dBox").width();
} else {
x = e.clientX - dx;
}
}
if (e.clientY - dy 0) {
y = 0;
} else {
y = e.clientY - dy;
}
$("#dBox").css({
left: x,
top: y
});
}
out = function (e) {
moveout = true;
setTimeout(function () {
moveout && up(e);
}, 10);
}
up = function (e) {
$("#dBox").unbind("mousemove", move).unbind("mouseout", out).css("opacity", 1);
handle.unbind("mouseup", up);
}
}


3,dBoxRemove():
代码如下:
//close the dBox
function dBoxRemove() {
if ($("#dBox")) {
$("#dBox").stop().fadeOut(200, function () {
$("#dBox").remove();
if (opts.overlay) {
$("#d_bg").remove();
$("#d_iframebg").remove();
}
});
}
}


来源:https://www.tulaoshi.com/n/20160219/1602874.html

延伸阅读
标签: 怀孕
现代社会我们可通过B超,三维彩超,四维彩超可以清楚的看到胎儿的生长发育。但是对于宝宝的能力却不怎么了解。都说宝宝生下来是白纸什么都不知道,那么为什么宝宝生下来就知道吃奶,知道登登小腿活动活动呢? 通过超声这个窗口,我们可以看到胎儿在子宫内的生活情形以及他们对各种刺激的反应。如胎儿在5周胎龄时就有自发的运动能力,而母亲...
标签: Web开发
打包下载 想着自己学习Javascript,以及Ajax、jQuery等已经有一段时间了,不过貌似还没有写过一个插件,看到jQuery官网上那么多令人眼前一亮的插件,自己今天也动心说是不是能够写一个类似的插件来瞧瞧,了解了jQuery插件的基本格式,理一下基本的思路,动工吧。。。 这个DivAlert插件,顾名思义就是页面弹出框,也就相当于Winform里面Me...
标签: Web开发
messages_cn.js !--验证国际化,中文-- (不引用messages_cn.js是英文的提示,用了是中文) 代码如下: required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a va...
标签: Web开发
打包下载 查了一下jq的官方插件编写文档( http://docs.jquery.com/Plugins/Authoring )以及文档中推荐的Mike Alsup写的一篇 A Plugin Development Pattern 。英语不是很好,但还是努力看下来(既学习到知识又能练习英语,何乐不为),照猫画虎的写了一个处女作——tabBox。 顾名思义,这个插件就是方便的产生具有tab选项卡功能“盒子...
标签: Web开发
打包下载 jQuery真的很好,有些效果甚至让我尖叫。而各种插件能实现你喜欢的效果,这种方式为jQuery的流行奠定了基础,就像那个crocs鞋子似的。jQuery还有一个优点是达到了将行为与结构分开的目的。 内容概要: 1. 安装 2. Hello jQuery 3. Find me:使用选择器和事件 4. Rate me:使用AJAX 5. Animate me(让我生动起来):使用FX (jQuery ...

经验教程

860

收藏

81
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部