ホームページ  >  記事  >  ウェブフロントエンド  >  ModelDialog JavaScript モーダル ダイアログ クラス code_javascript スキル

ModelDialog JavaScript モーダル ダイアログ クラス code_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 18:07:441032ブラウズ

/**
* JavaScript ModelDialog v0.1
*
* new ModelDialog({
* キャプション タイトル 'ダイアログ タイトル' (デフォルト)
* テンプレート本文の内容'' (デフォルト)
* DialogCls ダイアログ クラス名 'md-dialog' (デフォルト)
* headCls ヘッド クラス名 'md-head' (デフォルト)
* btnCloseCls 閉じるボタン クラス名 'md-close' (デフォルト)
* bodyCls ボディ クラス名 ' md-body' (デフォルト)
*shadowBg カバーレイヤーの背景色 'gray' (デフォルト)
*shadowOpy カバーレイヤー透明 0.2 (デフォルト)
* ドラッグ可能かどうか true (デフォルト)
*ragInWin ウィンドウ内のみをドラッグするかどうか (true)、デフォルトでエリアは相互に排他的です。
* エリア [minX、maxX、minY、maxY] とドラッグInWin は相互に排他的です
* });*/


ModelDialog JavaScript モーダル ダイアログ クラス code_javascript スキル

コアコード:

コードをコピー コードは次のとおりです:

/**
* JavaScript ModelDialog v0.4
* Copyright (c) 2010 snandy
* ブログ: http://snandy.javaeye.com/
* QQ グループ: 34580561
* 日付: 2010 -09-08
*
*
* new ModelDialog({
* キャプション タイトル 'ダイアログ タイトル' (デフォルト)
* テンプレート本文の内容'' (デフォルト)
* DialogClsダイアログクラス名 'md-dialog' (デフォルト)
* headCls ヘッドクラス名 'md-head' (デフォルト)
* btnCloseCls 閉じるボタンクラス名 'md-close' (デフォルト)
* bodyCls 本体クラス名 'md -body' (デフォルト)
*shadowBg カバーレイヤーの背景色 'gray' (デフォルト)
*shadowOpy カバーレイヤー透明 0.2 (デフォルト)
*ドラッグ可能 ドラッグできるかどうか true (デフォルト)
*ragInWin ウィンドウ内のみをドラッグするかどうか (true)、デフォルトでエリアは相互に排他的です
* エリア [minX、maxX、minY、maxY] とドラッグInWin は相互に排他的です
* });*/
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);
これを返します;
},
setCls : function(cls){
this[0].className = cls;
これを返します;
},
setSty : function(name,val){
name=='opacity' ?
IEですか?
this[0].style.filter = 'Alpha(Opacity=' val*100 ')' :
this[0].style.opacity = val :
this[0].style[name] ] = 値;
これを返します;
},
css : function(str){
this[0].style.cssText = str;
これを返します;
},
html : function(str){
this[0].innerHTML = str;
これを返します;
}
}
$.prototype.init.prototype = $.prototype;

function ModelDialog(opt){
this.dialogCls = opt.dialogCls || 'md-ダイアログ';
this.headCls = opt.headCls || 'MDヘッド';
this.btnCloseCls = opt.btnCloseCls || 'md-close';
this.bodyCls = opt.bodyCls || 'md-ボディ';
this.shadowBg = opt.shadowBg || 'グレー';
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=幅パディング;offsetWidth=幅パディングボーダー
if(this.dragable){
if(this.dragInWin){
var maxX = getViewSize().w - this.dialog.offsetWidth;
var maxY = getViewSize().h - this.dialog.offsetHeight;
this.dragdrop(this.dialog,{
ブリッジ : this.head,
エリア : [0,maxX,0,maxY]
});
戻る;
}
if(this.area){
this.dragdrop(this.dialog,{
ブリッジ : this.head,
エリア : this.area
});
戻る;
}
this.dragdrop(this.dialog,{
ブリッジ : 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
';height:' getFullSize().h px
';background:' 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;
},
dragdrop : function(){
return function(el,opt){
var _this=this, ele, diffX, diffY, dragX=true,dragY=true, minX, maxX, minY, maxY, bridge;
ele = el;
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 = 'absolute';
bridge ?
this.on(bridge,'mousedown',mousedown) :
this.on(ele,'mousedown',mousedown);
function mousedown(e){
e = e || window.event;
ele.style.cursor = 'pointer';
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 || window.event;
var moveX = e.clientX - diffX,
moveY = e.clientY - diffY;
moveX < minX && (moveX = minX); // left 最小值
moveX > maxX && (moveX = maxX); // left 最大值
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
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。