A simple jQuery plug-in production learning process and examples_jquery
- WBOYOriginal
- 2016-05-16 18:28:481366browse
1. First, making a jQuery plug-in requires a closure
(function ($) {
//code in here
})(jQuery);
This is the official plug-in development specification requirement from jQuery, use this What are the benefits of this way of writing?
a) Avoid global dependencies.
b) Avoid third-party sabotage.
c) Compatible with jQuery operator '$' and 'jQuery '
Second, with the closure, add the skeleton of the plug-in
$.fn.dBox = function (options) {
var defaults = {
//Various attributes and their default values
};
var opts = $.extend(defaults, options);
//function codes in here
};
Here dBox is my name for this pop-up layer plug-in
Third, establish the properties and their default values for 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
};
Fourth, since it is a pop-up form, you must first design a div form and mask layer . Here I also write the style directly in the function codes area. Input as follows:
//build html code of the dBox
var dBoxHtml = "
";
dBoxHtml = "
";
dBoxHtml = "
" opts.title "
";
dBoxHtml = "
[x]
";
dBoxHtml = "
";
dBoxHtml = "< ;div id='d_content' style='width:100%;height:100%;padding:3px;'>" opts.content "
";
dBoxHtml = "
";
var dBoxBG = "
In IE6, z-index will not work on the drop-down list, so here the iframe with the id d_iframebg is added to the mask layer as the mask layer, like this , the framework has generally been made.
Fifth, now we consider what functions we want to implement First, how to appear a pop-up form, usually by clicking, here we still use the click event
//click event
$(this).click(function () {
$ ("body").append(dBoxHtml);
//case ajax
if (opts.ajaxSrc != "") {
$("#d_content").append("
");
$("#d_ajaxcontent").load(opts.ajaxSrc);
}
//case iframe
else if (opts. iframeSrc != "") {
$("#d_content").append("
The last return false can remove the browser's default click event. For example, binding a click event to an a tag will not cause the default jump effect.
In this click event, first bind the dBox frame The page is loaded, and then the loading method of the content is determined and processed separately. Finally, there are three events
1, addCSS() this event handles the mask layer size, the position of the pop-up layer
2, drag() this event handles Dragging of the pop-up layer
3, dBoxRemove() This event handles the closing of the pop-up layer
With these three events, the entire plug-in is basically completed
Six, posted here as above Codes for three events 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] } );
}
}
In this addCSS, there are two more functions to be implemented, the following code:
//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();
}
});
}
}
At this point, the plug-in production is basically completed, but the loading thing has not been added. . .
I also found that in IE6, the height and width of the pop-up iframe are a little less, and when there is a mask layer, the movement is not smooth
Any other issues are welcome to discuss!
Online demo address
http://demo.jb51.net/js/dBox/dBox.htmPackage download address
http://xiazai.jb51.net/201004/ yuanma/dBox.rar