DWZ-Dialog调整位置

时间:2022-11-01 11:08:51
DWZ调整窗口的位置

var  url = "${ctx}/pages/CsEarlyDetail/contactInfo.do?csPerson.customerId=${csPerson.customerId}";
var options ={mixable:true,minable:true,resizable:true,drawable:true,max:false,mask:false,width:"900",height:"250",close:doClose()};
$.pdialog.open(url,"detailDialog","详情",options);
//阴影位置显示不对
//$.pdialog.resizeDialog({style: {left: 550, top: 290}}, $.pdialog.getCurrent(), "w");
$.pdialog.resizeDialog({style: {left: 550, top: 290}}, $.pdialog.getCurrent(), "w");
$.pdialog.resizeDialog({style: {left: 550, top: 290}}, $.pdialog.getCurrent(), "n");


DWZ Dialog 源码

/**
 * @author Roger Wu
 * reference:dwz.drag.js, dwz.dialogDrag.js, dwz.resize.js, dwz.taskBar.js
 */
(function($){
       $.pdialog = {
              _op:{height:300, width:580, minH:40, minW:50, total:20, max:false, mask:false, resizable:true, drawable:true, maxable:true,minable:true,fresh:true},
              _current:null,
              _zIndex:42,
              getCurrent:function(){
                     return this._current;
              },
              reload:function(url, options){
                     var op = $.extend({data:{}, dialogId:"", callback:null}, options);
                     var dialog = (op.dialogId && $("body").data(op.dialogId)) || this._current;
                     if (dialog){
                           var jDContent = dialog.find(".dialogContent");
                           jDContent.ajaxUrl({
                                  type:"POST", url:url, data:op.data, callback:function(response){
                                         jDContent.find("[layoutH]").layoutH(jDContent);
                                         $(".pageContent", dialog).width($(dialog).width()-14);
                                         $(":button.close", dialog).click(function(){
                                                $.pdialog.close(dialog);
                                                return false;
                                         });
                                         if ($.isFunction(op.callback)) op.callback(response);
                                  }
                           });
                     }
              },
              //打开一个层
              open:function(url, dlgid, title, options) {
                     var op = $.extend({},$.pdialog._op, options);
                     var dialog = $("body").data(dlgid);
                     //重复打开一个层
                     if(dialog) {
                           if(dialog.is(":hidden")) {
                                  dialog.show();
                           }
                           if(op.fresh || url != $(dialog).data("url")){
                                  dialog.data("url",url);
                                  dialog.find(".dialogHeader").find("h1").html(title);
                                  this.switchDialog(dialog);
                                  var jDContent = dialog.find(".dialogContent");
                                  jDContent.loadUrl(url, {}, function(){
                                         jDContent.find("[layoutH]").layoutH(jDContent);
                                         $(".pageContent", dialog).width($(dialog).width()-14);
                                         $("button.close").click(function(){
                                                $.pdialog.close(dialog);
                                                return false;
                                         });
                                  });
                           }

                     } else { //打开一个全新的层

                           $("body").append(DWZ.frag["dialogFrag"]);
                           dialog = $(">.dialog:last-child", "body");
                           dialog.data("id",dlgid);
                           dialog.data("url",url);
                           if(options.close) dialog.data("close",options.close);
                           if(options.param) dialog.data("param",options.param);
                           ($.fn.bgiframe && dialog.bgiframe());

                           dialog.find(".dialogHeader").find("h1").html(title);
                           $(dialog).css("zIndex", ($.pdialog._zIndex+=2));
                           $("div.shadow").css("zIndex", $.pdialog._zIndex - 3).show();
                           $.pdialog._init(dialog, options);
                           $(dialog).click(function(){
                                  $.pdialog.switchDialog(dialog);
                           });

                           if(op.resizable)
                                  dialog.jresize();
                           if(op.drawable)
                                  dialog.dialogDrag();
                           $("a.close", dialog).click(function(event){
                                  $.pdialog.close(dialog);
                                  return false;
                           });
                           if (op.maxable) {
                                  $("a.maximize", dialog).show().click(function(event){
                                         $.pdialog.switchDialog(dialog);
                                         $.pdialog.maxsize(dialog);
                                         dialog.jresize("destroy").dialogDrag("destroy");
                                         return false;
                                  });
                           } else {
                                  $("a.maximize", dialog).hide();
                           }
                           $("a.restore", dialog).click(function(event){
                                  $.pdialog.restore(dialog);
                                  dialog.jresize().dialogDrag();
                                  return false;
                           });
                           if (op.minable) {
                                  $("a.minimize", dialog).show().click(function(event){
                                         $.pdialog.minimize(dialog);
                                         return false;
                                  });
                           } else {
                                  $("a.minimize", dialog).hide();
                           }
                           $("div.dialogHeader a", dialog).mousedown(function(){
                                  return false;
                           });
                           $("div.dialogHeader", dialog).dblclick(function(){
                                  if($("a.restore",dialog).is(":hidden"))
                                         $("a.maximize",dialog).trigger("click");
                                  else
                                         $("a.restore",dialog).trigger("click");
                           });
                           if(op.max) {
//                                $.pdialog.switchDialog(dialog);
                                  $.pdialog.maxsize(dialog);
                                  dialog.jresize("destroy").dialogDrag("destroy");
                           }
                           $("body").data(dlgid, dialog);
                           $.pdialog._current = dialog;
                           $.pdialog.attachShadow(dialog);
                           //load data
                           var jDContent = $(".dialogContent",dialog);
                           jDContent.loadUrl(url, {}, function(){
                                  jDContent.find("[layoutH]").layoutH(jDContent);
                                  $(".pageContent", dialog).width($(dialog).width()-14);
                                  $("button.close").click(function(){
                                         $.pdialog.close(dialog);
                                         return false;
                                  });
                           });
                     }
                     if (op.mask) {
                           $(dialog).css("zIndex", 1000);
                           $("a.minimize",dialog).hide();
                           $(dialog).data("mask", true);
                           $("#dialogBackground").show();
                     }else {
                           //add a task to task bar
                           if(op.minable) $.taskBar.addDialog(dlgid,title);
                     }
              },
              /**
               * 切换当前层
               * @param {Object} dialog
               */
              switchDialog:function(dialog) {
                     var index = $(dialog).css("zIndex");
                     $.pdialog.attachShadow(dialog);
                     if($.pdialog._current) {
                           var cindex = $($.pdialog._current).css("zIndex");
                           $($.pdialog._current).css("zIndex", index);
                           $(dialog).css("zIndex", cindex);
                           $("div.shadow").css("zIndex", cindex - 1);
                           $.pdialog._current = dialog;
                     }
                     $.taskBar.switchTask(dialog.data("id"));
              },
              /**
               * 给当前层附上阴隐层
               * @param {Object} dialog
               */
              attachShadow:function(dialog) {
                     var shadow = $("div.shadow");
                     if(shadow.is(":hidden")) shadow.show();
                     shadow.css({
                           top: parseInt($(dialog)[0].style.top) - 2,
                           left: parseInt($(dialog)[0].style.left) - 4,
                           height: parseInt($(dialog).height()) + 8,
                           width: parseInt($(dialog).width()) + 8,
                           zIndex:parseInt($(dialog).css("zIndex")) - 1
                     });
                     $(".shadow_c", shadow).children().andSelf().each(function(){
                           $(this).css("height", $(dialog).outerHeight() - 4);
                     });
              },
              _init:function(dialog, options) {
                     var op = $.extend({}, this._op, options);
                     var height = op.height>op.minH?op.height:op.minH;
                     var width = op.width>op.minW?op.width:op.minW;
                     if(isNaN(dialog.height()) || dialog.height() < height){
                           $(dialog).height(height+"px");
                           $(".dialogContent",dialog).height(height - $(".dialogHeader", dialog).outerHeight() - $(".dialogFooter", dialog).outerHeight() - 6);
                     }
                     if(isNaN(dialog.css("width")) || dialog.width() < width) {
                           $(dialog).width(width+"px");
                     }

                     var iTop = ($(window).height()-dialog.height())/2;
                     dialog.css({
                           left: ($(window).width()-dialog.width())/2,
                           top: iTop > 0 ? iTop : 0
                     });
              },
              /**
               * 初始化半透明层
               * @param {Object} resizable
               * @param {Object} dialog
               * @param {Object} target
               */
              initResize:function(resizable, dialog,target) {
                     $("body").css("cursor", target + "-resize");
                     resizable.css({
                           top: $(dialog).css("top"),
                           left: $(dialog).css("left"),
                           height:$(dialog).css("height"),
                           width:$(dialog).css("width")
                     });
                     resizable.show();
              },
              /**
               * 改变阴隐层
               * @param {Object} target
               * @param {Object} options
               */
              repaint:function(target,options){
                     var shadow = $("div.shadow");
                     if(target != "w" && target != "e") {
                           shadow.css("height", shadow.outerHeight() + options.tmove);
                           $(".shadow_c", shadow).children().andSelf().each(function(){
                                  $(this).css("height", $(this).outerHeight() + options.tmove);
                           });
                     }
                     if(target == "n" || target =="nw" || target == "ne") {
                           shadow.css("top", options.otop - 2);
                     }
                     if(options.owidth && (target != "n" || target != "s")) {
                           shadow.css("width", options.owidth + 8);
                     }
                     if(target.indexOf("w") >= 0) {
                           shadow.css("left", options.oleft - 4);
                     }
              },
              /**
               * 改变左右拖动层的高度
               * @param {Object} target
               * @param {Object} tmove
               * @param {Object} dialog
               */
              resizeTool:function(target, tmove, dialog) {
                     $("div[class^='resizable']", dialog).filter(function(){
                           return $(this).attr("tar") == 'w' || $(this).attr("tar") == 'e';
                     }).each(function(){
                           $(this).css("height", $(this).outerHeight() + tmove);
                     });
              },
              /**
               * 改变原始层的大小
               * @param {Object} obj
               * @param {Object} dialog
               * @param {Object} target
               */
              resizeDialog:function(obj, dialog, target) {
                     var oleft = parseInt(obj.style.left);
                     var otop = parseInt(obj.style.top);
                     var height = parseInt(obj.style.height);
                     var width = parseInt(obj.style.width);
                     if(target == "n" || target == "nw") {
                           tmove = parseInt($(dialog).css("top")) - otop;
                     } else {
                           tmove = height - parseInt($(dialog).css("height"));
                     }
                     $(dialog).css({left:oleft,width:width,top:otop,height:height});
                     $(".dialogContent", dialog).css("width", (width-12) + "px");
                     $(".pageContent", dialog).css("width", (width-14) + "px");
                     if (target != "w" && target != "e") {
                           var content = $(".dialogContent", dialog);
                           content.css({height:height - $(".dialogHeader", dialog).outerHeight() - $(".dialogFooter", dialog).outerHeight() - 6});
                           content.find("[layoutH]").layoutH(content);
                           $.pdialog.resizeTool(target, tmove, dialog);
                     }
                     $.pdialog.repaint(target, {oleft:oleft,otop: otop,tmove: tmove,owidth:width});

                     $(window).trigger(DWZ.eventType.resizeGrid);
              },
              close:function(dialog) {
                     if(typeof dialog == 'string') dialog = $("body").data(dialog);
                     var close = dialog.data("close");
                     var go = true;
                     if(close && $.isFunction(close)) {
                           var param = dialog.data("param");
                           if(param && param != ""){
                                  param = DWZ.jsonEval(param);
                                  go = close(param);
                           } else {
                                  go = close();
                           }
                           if(!go) return;
                     }

                     $(dialog).hide();
                     $("div.shadow").hide();
                     if($(dialog).data("mask")){
                           $("#dialogBackground").hide();
                     } else{
                           if ($(dialog).data("id")) $.taskBar.closeDialog($(dialog).data("id"));
                     }
                     $("body").removeData($(dialog).data("id"));
                     $(dialog).trigger(DWZ.eventType.pageClear).remove();
              },
              closeCurrent:function(){
                     this.close($.pdialog._current);
              },
              checkTimeout:function(){
                     var $conetnt = $(".dialogContent", $.pdialog._current);
                     var json = DWZ.jsonEval($conetnt.html());
                     if (json && json.statusCode == DWZ.statusCode.timeout) this.closeCurrent();
              },
              maxsize:function(dialog) {
                     $(dialog).data("original",{
                           top:$(dialog).css("top"),
                           left:$(dialog).css("left"),
                           width:$(dialog).css("width"),
                           height:$(dialog).css("height")
                     });
                     $("a.maximize",dialog).hide();
                     $("a.restore",dialog).show();
                     var iContentW = $(window).width();
                     var iContentH = $(window).height() - 34;
                     $(dialog).css({top:"0px",left:"0px",width:iContentW+"px",height:iContentH+"px"});
                     $.pdialog._resizeContent(dialog,iContentW,iContentH);
              },
              restore:function(dialog) {
                     var original = $(dialog).data("original");
                     var dwidth = parseInt(original.width);
                     var dheight = parseInt(original.height);
                     $(dialog).css({
                           top:original.top,
                           left:original.left,
                           width:dwidth,
                           height:dheight
                     });
                     $.pdialog._resizeContent(dialog,dwidth,dheight);
                     $("a.maximize",dialog).show();
                     $("a.restore",dialog).hide();
                     $.pdialog.attachShadow(dialog);
              },
              minimize:function(dialog){
                     $(dialog).hide();
                     $("div.shadow").hide();
                     var task = $.taskBar.getTask($(dialog).data("id"));
                     $(".resizable").css({
                           top: $(dialog).css("top"),
                           left: $(dialog).css("left"),
                           height:$(dialog).css("height"),
                           width:$(dialog).css("width")
                     }).show().animate({top:$(window).height()-60,left:task.position().left,width:task.outerWidth(),height:task.outerHeight()},250,function(){
                           $(this).hide();
                           $.taskBar.inactive($(dialog).data("id"));
                     });
              },
              _resizeContent:function(dialog,width,height) {
                     var content = $(".dialogContent", dialog);
                     content.css({width:(width-12) + "px",height:height - $(".dialogHeader", dialog).outerHeight() - $(".dialogFooter", dialog).outerHeight() - 6});
                     content.find("[layoutH]").layoutH(content);
                     $(".pageContent", dialog).css("width", (width-14) + "px");

                     $(window).trigger(DWZ.eventType.resizeGrid);
              }
       };
})(jQuery);