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

SDDW15

SDDW15

2016-02-19 13:04

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

打包下载

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

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

(本文来源于图老师网站,更多请访问http://m.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();
}
});
}
}


展开更多 50%)
分享

猜你喜欢

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

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

jQuery 插件开发 其实很简单

Web开发
jQuery 插件开发 其实很简单

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Jquery 插件学习实例1 插件制作说明与tableUI优化

Web开发
Jquery 插件学习实例1 插件制作说明与tableUI优化

JQuery 插件制作实践 xMarquee插件V1.0

Web开发
JQuery 插件制作实践 xMarquee插件V1.0

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

jQuery 练习[一] 学习jquery的准备工作

Web开发
jQuery 练习[一] 学习jquery的准备工作

Jquery操作Select 简单方便 一个js插件搞定

Web开发
Jquery操作Select 简单方便 一个js插件搞定

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JQuery 文本框使用小结

JQuery 文本框使用小结

超级玛利原代码

超级玛利原代码
下拉加载更多内容 ↓