Home >Web Front-end >JS Tutorial >ModelDialog JavaScript modal dialog class code_javascript skills

ModelDialog JavaScript modal dialog class code_javascript skills

WBOY
WBOYOriginal
2016-05-16 18:07:441080browse

/**
* JavaScript ModelDialog v0.1
*
* new ModelDialog({
* caption title 'Dialog title' (default)
* template body content'' (default)
* dialogCls dialog className 'md-dialog' (default)
* headCls head className 'md-head' (default)
* btnCloseCls close button className 'md-close' (default)
* bodyCls Body className 'md-body' (default)
* shadowBg cover layer background color 'gray' (default)
* shadowOpy cover layer transparent 0.2 (default)
* dragable whether it can be dragged true (default )
* dragInWin Whether to only drag within the window (true) and area are mutually exclusive by default
* area [minX, maxX, minY, maxY] and dragInWin are mutually exclusive
* });
*/

ModelDialog JavaScript modal dialog class code_javascript skills


Core code:
Copy code The code is as follows:

/**
* JavaScript ModelDialog v0.4
* Copyright (c) 2010 snandy
* Blog: http://snandy.javaeye.com/
* QQ Group: 34580561
* Date: 2010 -09-08
*
*
* new ModelDialog({
* caption title 'Dialog title' (default)
* template body content'' (default)
* dialogCls dialog className 'md-dialog' (default)
* headCls head className 'md-head' (default)
* btnCloseCls close button className 'md-close' (default)
* bodyCls body className 'md-body' (default)
* shadowBg cover layer background color 'gray' (default)
* shadowOpy cover layer transparent 0.2 (default)
* dragable whether it can be dragged true (default)
* dragInWin Whether to only drag within the window (true) and area are mutually exclusive by default
* area [minX, maxX, minY, maxY] and dragInWin are mutually exclusive
* });
*/
ModelDialog =
function(){
var px = 'px';
var isIE = /msie/.test(navigator.userAgent.toLowerCase());

function getViewSize(){
return {w: window['innerWidth'] || document.documentElement.clientWidth,
h: window['innerHeight'] || document.documentElement.clientHeight}
}
function getFullSize(){
var w = Math.max(document.documentElement.clientWidth ,document.body.clientWidth) Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
var h = Math.max(document.documentElement.clientHeight,document.body.clientHeight) Math.max(document.documentElement.scrollTop, document.body.scrollTop);
w = Math.max(document.documentElement.scrollWidth,w);
h = Math.max(document.documentElement.scrollHeight,h);
return {w:w,h:h};
}
function $(tag){
return new $.prototype.init(tag);
}
$.prototype = {
init : function(tag){
this[0] = document.createElement(tag);
return this;
},
setCls : function(cls){
this[0].className = cls;
return this;
},
setSty : function(name,val){
name=='opacity' ?
isIE ?
this[0].style.filter = 'Alpha(Opacity=' val*100 ')' :
this[0].style.opacity = val :
this[0].style[name] = val;
return this;
},
css : function(str){
this[0].style.cssText = str;
return this;
},
html : function(str){
this[0].innerHTML = str;
return this;
}
}
$.prototype.init.prototype = $.prototype;

function ModelDialog(opt){
this.dialogCls = opt.dialogCls || 'md-dialog';
this.headCls = opt.headCls || 'md-head';
this.btnCloseCls = opt.btnCloseCls || 'md-close';
this.bodyCls = opt.bodyCls || 'md-body';
this.shadowBg = opt.shadowBg || 'gray';
this.shadowOpy = opt.shadowOpy || '0.2';
this.caption = opt.caption || "对话框标题";
this.template = opt.template || '';
this.dragable = opt.dragable != false;
this.dragInWin = opt.dragInWin != false;
this.area = opt.area;
this.dialog = null;
this.head = null;
this.label = null;
this.btnClose = null;
this.body = null;
this.shadow = null;
this.init();
}
ModelDialog.prototype = {
init : function(){
var _this = this;
this.dialog = $('div').setCls(this.dialogCls).css('position:absolute;z-index:100;')[0];
this.head = $('div').setCls(this.headCls)[0];
this.label = $('label').html(this.caption)[0];
this.btnClose = $('div').setCls(this.btnCloseCls)[0];
this.on(this.btnClose,'click',function(){
_this.onClose();
});
this.head.appendChild(this.label);
this.head.appendChild(this.btnClose);
this.body = $('div').setCls(this.bodyCls)[0];
this.setContent(this.template);
this.dialog.appendChild(this.head);
this.dialog.appendChild(this.body);
this.createShadow();
document.body.appendChild(this.shadow);
document.body.appendChild(this.dialog);
this.moveToCenter();
// 计算拖拽范围
// 标准模式下:clientWidth=width padding;offsetWidth=width padding border
if(this.dragable){
if(this.dragInWin){
var maxX = getViewSize().w - this.dialog.offsetWidth;
var maxY = getViewSize().h - this.dialog.offsetHeight;
this.dragdrop(this.dialog,{
bridge : this.head,
area : [0,maxX,0,maxY]
});
return;
}
if(this.area){
this.dragdrop(this.dialog,{
bridge : this.head,
area : this.area
});
return;
}
this.dragdrop(this.dialog,{
bridge : this.head
});

}

},
destroy : function(){
this.dialog = null;
this.head = null;
this.label = null;
this.btnClose = null;
this.body = null;
this.shadow = null;
},
createShadow : function(){
var str = 'position:absolute;left:0px;top:0px;z-index:1'
';width:' getFullSize().w px
';높이:' getFullSize().h px
';배경:' this.shadowBg
';opacity:' this.shadowOpy
';filter:Alpha(Opacity=' this.shadowOpy *100');';
var _this = this;
this.shadow = $("div").setCls('md-shadow').css(str)[0];
this.on(window,'resize',function(){
_this.shadow.style.width = getFullSize().w px;
_this.shadow.style.height = getFullSize(). h px
_this.moveToCenter()
});
},
moveTo : function(x, y){
this.dialog.style.left = x px;
this.dialog.style.top = y px;
},
moveToCenter : function(){
var size = getViewSize();
var x = (size.w-50)/2 - (this.dialog.clientWidth-50)/2;
var y = (size.h- 50)/2 - (this.dialog.clientHeight-50)/2 document.documentElement.scrollTop;
this.moveTo(x, y);
},
setCaption : function(v){
this.caption = v;
this.label.innerHTML = v;
},
setContent : function(str){
this.template = str;
this.body.innerHTML = str;
},
onClose : function(){
document.body.removeChild(this.dialog);
document.body.removeChild(this.shadow);
if(this['onbi']){
this.onbi();
}
this.destroy();
},
on : function(el, type, fn){
el.addEventListener ?
el.addEventListener(type, fn, false) :
el.attachEvent ?
el.attachEvent("on" type, fn) :
el['on' type] = fn;
},
un : function(el,type,fn){
el.removeEventListener ?
el.removeEventListener(type, fn, false) :
el.detachEvent ?
el.detachEvent("on" type, fn) :
el['on' type] = null;
},
드래그드롭: 함수(){
반환 함수(el,opt){
var _this=this, ele, diffX, diffY, dragX=true, dragY=true, minX, maxX , 최소Y, 최대Y, 브리지;
엘 = 엘;
opt && opt.dragX===false && (dragX=false);
opt && opt.dragY===false && (dragY=false);
opt && opt.area && typeof opt.area[0]==='number' && (minX=opt.area[0]);
opt && opt.area && typeof opt.area[1]==='number' && (maxX=opt.area[1]);
opt && opt.area && typeof opt.area[2]==='number' && (minY=opt.area[2]);
opt && opt.area && typeof opt.area[3]==='number' && (maxY=opt.area[3]);
opt && opt.bridge && (bridge=opt.bridge);
ele.style.position = '절대';
다리?
this.on(bridge,'mousedown',mousedown) :
this.on(ele,'mousedown',mousedown);
function mousedown(e){
e = e || 창.이벤트;
ele.style.cursor = '포인터';
if(ele.setCapture){//IE
_this.on(ele, "losecapture", mouseup);
ele.setCapture();
e.cancelBubble = true; //IE
}else if(window.captureEvents){//标准DOM
e.stopPropagation();
_this.on(window, "blur", mouseup);
e.preventDefault();
}
_x = e.clientX;
_y = e.clientY;
diffX = e.clientX - ele.offsetLeft;
diffY = e.clientY - ele.offsetTop;
_this.on(document,'mousemove',mousemove);
_this.on(document,'mouseup',mouseup);
}
function mousemove(e){
e = e || 창.이벤트;
var moveX = e.clientX - diffX,
moveY = e.clientY - diffY;
moveX < minX && (moveX = minX); // 왼쪽 最小值
moveX > maxX && (moveX = maxX); // 왼쪽 最大值
moveY < minY && (moveY = minY); // top 最小值
moveY > maxY && (moveY = maxY); // top 最大值

dragX && (ele.style.left = moveX 'px');
dragY && (ele.style.top = moveY 'px');
}
function mouseup(e){
ele.style.cursor = 'default';
_this.un(document,'mousemove',mousemove);
_this.un(document,'mouseup',mouseup);
if(ele.releaseCapture){//IE
_this.un(ele, "losecapture", mouseup);
ele.releaseCapture();
}
if(window.releaseEvents){//标准DOM
_this.un(window, "blur", mouseup);
}
}
}
}()

}
return ModelDialog;
}();

演示地址 http://demo.jb51.net/js/2011/ModelDialog/index.html
打包下载地址 http://www .jb51.net/jiaoben/35245.html
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn