二,有了闭包,在其中加入插件的骨架 复制代码 代码如下: $.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 };
六,这里贴出如上三个事件的代码 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(); } }); } }