1. 먼저 jQuery 플러그인을 만들려면 클로저가 필요합니다
(function ($) {
//code in here
})(jQuery)
공식 플러그인입니다. jQuery의 개발 사양 요구 사항은 이것을 사용하십시오. 이 작성 방법의 이점은 무엇입니까?
a) 전역 종속성을 피하세요.
b) 제3자의 방해 행위를 피하세요.
c) jQuery 연산자 '$' 및 'jQuery'와 호환
둘째, 클로저를 사용하여 플러그인의 뼈대를 추가합니다
$.fn.dBox = 함수(옵션) {
var defaults = {
//다양한 속성과 기본값
};
var opts = $.extend(defaults, options)
//여기에 있는 함수
}; 🎜>
여기서 dBox는 이 팝업 레이어 플러그인의 이름입니다
셋째, dBox의 속성과 기본값을 설정합니다
$.fn.dBox = 함수(옵션) {
var defaults = {
불투명도: 0.6, //마스크 레이어의 경우
드래그: true,
제목: 'dBox',
내용: '',
왼쪽: 400 ,
상단: 200,
너비: 600,
높이: 300,
setPos: false, //고객의 왼쪽 및 상단을 사용하는 경우
overlay: true, // 마스크 레이어
loadStr: 'Loading',
ajaxSrc: '',
iframeSrc: ''
}
var opts = $.extend(defaults, options)
/ /함수 코드는 여기
};
넷째, 팝업 형태이므로 먼저 div 폼과 마스크 레이어를 디자인해야 합니다
. 기능 코드 영역에 스타일을 직접 입력하세요.
//dBox의 HTML 코드 빌드
var dBoxHtml = "
";
dBoxHtml = "
";
dBoxHtml = "
" opts.title "
"
dBoxHtml = "
[x]
"
dBoxHtml = "< ;/div>";
dBoxHtml = "< ;div id='d_content' style='width:100%;height:100%;padding:3px;'>" opts.content "
";
dBoxHtml = "
";
var dBoxBG = "
다섯째, 이제 어떤 기능을 구현하고 싶은지 고려합니다
먼저 팝업 형식을 표시하는 방법은 일반적으로 클릭으로 이루어지며 여기서는 여전히 클릭 이벤트를 사용합니다//클릭 이벤트
$(this).click( function () {
$ ("body").append(dBoxHtml);
//case ajax
if (opts.ajaxSrc != "") {
$("#d_content") .append("
< div id='d_ajaxcontent'>
");
$("#d_ajaxcontent").load(opts.ajaxSrc);
}
//case iframe
else if (opts.iframeSrc != "") {
$("#d_content").append("
");
}
addCSS();
//case 드래그
if ( opts.drag == true) {
drag();
}
$("#d_close").click(dBoxRemove)
return false
마지막 반환 false는 브라우저의 기본 클릭 이벤트를 제거할 수 있습니다. 예를 들어 클릭 이벤트를 a 태그에 바인딩하면 기본 점프 효과가 발생하지 않습니다.
이 클릭 이벤트에서 먼저 페이지는 dBox입니다. 로드된 후 콘텐츠의 로드 방법이 별도로 결정되어 처리됩니다. 마지막으로 세 가지 이벤트가 있습니다
1, addCSS() 이 이벤트는 마스크 레이어 크기, 팝업 레이어 위치를 처리합니다
2 , drag() 팝업 레이어 드래그를 처리하는 이벤트입니다
3, dBoxRemove() 팝업 레이어를 닫는 이벤트를 처리합니다
이 세 가지 이벤트로 기본적으로 전체 플러그인이 완성됩니다
Six, 위와 같이 여기에 게시됨 세 가지 이벤트에 대한 코드
1, addCSS():
//dBox에 CSS 추가
function addCSS() {
var pos = setPosition()
$ ("#dBox").css({ "왼쪽": 위치[ 0], "상단": 위치[1], "너비": opts.width "px", "높이": opts.height "px" } );
if (opts.overlay) {
var wh = getPageSize()
$(dBoxBG).appendTo("body").css({ "opacity": opts.opacity, "width ": wh[0], "height": wh[1] } );
}
}
이 addCSS에는 구현될 함수가 두 개 더 있습니다. 코드:
//크기 계산 마스크 레이어를 넣을 페이지가 문서 전체를 덮습니다
function getPageSize() {
if ($(window).height() > $(document).height()) {
h = $ (window).height();
} else {
h = $( document).height()
}
w = $(window).width()
return Array(w, h);
}
//dBox를 현재 창 중앙에 배치할 dBox의 위치를 계산합니다.
function setPosition() {
if (opts.setPos) {
l = opts.left;
t = opts.top;
} else {
var w = opts.width;
var h = opts.height; $(document).width();
var height = $(window).height ();
var left = $(document).scrollLeft()
var top = $(document). scrollTop();
var t = 상단(높이/2) - (h/2)
var l = 왼쪽(너비/2) - (w/2)
return 배열(l, t);
}
2, drag():
/ /dBox 드래그 //이 이벤트에는 4개의 이벤트가 포함됩니다(handle.mousedown,move,out,up)
function drag() {
var dx, dy, moveout
var handler = $ ("#dBox").find("#d_head>#d_title").css('cursor', 'move ');
handle.mousedown(function (e) {
//e와 dBox 사이의 거리를 계산합니다.
dx = e.clientX -parseInt($("#dBox").css("left "));
dy = e.clientY -parseInt($("#dBox").css ("top"));
//mousemove 이벤트 및 mouseout 이벤트를 dBox에 바인딩
$( "#dBox").mousemove(move).mouseout(out).css({ "opacity": opts .opacity })
handle.mouseup(up)
}); 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({
왼쪽 : x,
top: y
});
}
out = function (e) {
moveout = true
setTimeout() {
moveout && up(e);
}, 10);
}
up = function ( e) {
$("#dBox").unbind("mousemove", move).unbind(" mouseout", out).css("opacity", 1);
handle.unbind("mouseup ", up);
}
}
3 , dBoxRemove():
function dBoxRemove() { if ($("#dBox")) {
$ ("#dBox").stop().fadeOut(200, function () {
$ ("#dBox").remove();
if (opts.overlay) {
$(" #d_bg").remove()
$("#d_iframebg").remove() ;
}
});
}
}
이 시점에서 플러그인 제작은 기본적으로 완료되었으나 로딩이 완료되지 않았습니다. 추가되었습니다. . .
또한 IE6에서는 팝업 iframe의 높이와 너비가 조금 더 작고, 마스크 레이어가 있을 때 움직임이 부드럽지 않다는 것을 발견했습니다.
다른 문제에 대해서는 토론 환영합니다!
온라인 데모 주소
http://demo.jb51.net/js/dBox/dBox.htm
패키지 다운로드 주소http://xiazai.jb51.net/201004/ yuanma/dBox.rar