前言

扩展自$.fn.panel.defaults。使用$.fn.window.defaults重写默认值对象。下载该插件翻译源码

窗口控件是一个浮动和可拖拽的面板可以用作应用程序窗口。默认情况下,窗口可以移动,调整大小和关闭。它的内容也可以被定义为静态html或要么通过ajax动态加载。

源码

/*** jQuery EasyUI 1.3.2* *翻译:qq 1364386878*/
(function ($) {//设置面板大小和布局function _resize(jq, _position) {var opts = $.data(jq, "window").options;if (_position) {if (_position.width) {opts.width = _position.width;}if (_position.height) {opts.height = _position.height;}if (_position.left != null) {opts.left = _position.left;}if (_position.top != null) {opts.top = _position.top;}}$(jq).panel("resize", opts);};//移动窗口到新位置function _move(jq, options) {var window = $.data(jq, "window");if (options) {if (options.left != null) {window.options.left = options.left;}if (options.top != null) {window.options.top = options.top;}}$(jq).panel("move", window.options);if (window.shadow) {window.shadow.css({left: window.options.left,top: window.options.top});}};//仅水平居中窗口function _hcenter(jq, IsMove) {var win = $.data(jq, "window");var opts = win.options;var width = opts.width;if (isNaN(width)) {width = win.window._outerWidth();}if (opts.inline) {var _f = win.window.parent();opts.left = (_f.width() - width) / 2 + _f.scrollLeft();} else {opts.left = ($(window)._outerWidth() - width) / 2 + $(document).scrollLeft();}if (IsMove) {_move(jq);}};//仅垂直居中窗口function _vcenter(jq, IsMove) {var win = $.data(jq, "window");var opts = win.options;var height = opts.height;if (isNaN(height)) {height = win.window._outerHeight();}if (opts.inline) {var parentwin = win.window.parent();opts.top = (parentwin.height() - height) / 2 + parentwin.scrollTop();} else {opts.top = ($(window)._outerHeight() - height) / 2 + $(document).scrollTop();}if (IsMove) {_move(jq);}};//初始化function init(jq) {var winD = $.data(jq, "window");//渲染panelvar win = $(jq).panel($.extend({}, winD.options, {border: false,//定义是否显示面板边框doSize: true,//如果设置为true,在面板被创建的时候将重置大小和重新布局closed: true,//定义是否可以关闭窗口cls: "window",//定义是否可以关闭窗口headerCls: "window-header",//添加一个CSS类ID到面板头部bodyCls: "window-body " + (winD.options.noheader ? "window-body-noheader" : ""),//在面板销毁之前触发,返回false可以取消销毁操作onBeforeDestroy: function () {if (winD.options.onBeforeDestroy.call(jq) == false) {return false;}if (winD.shadow) {winD.shadow.remove();}if (winD.mask) {winD.mask.remove();}},//在面板关闭之后触发onClose: function () {if (winD.shadow) {winD.shadow.hide();}if (winD.mask) {winD.mask.hide();}winD.options.onClose.call(jq);},//在打开面板之后触发onOpen: function () {if (winD.mask) {winD.mask.css({ display: "block", zIndex: $.fn.window.defaults.zIndex++ });}if (winD.shadow) {winD.shadow.css({display: "block",zIndex: $.fn.window.defaults.zIndex++,left: winD.options.left,top: winD.options.top,width: winD.window._outerWidth(),height: winD.window._outerHeight()});}winD.window.css("z-index", $.fn.window.defaults.zIndex++);winD.options.onOpen.call(jq);},//在面板改变大小之后触发onResize: function (width, height) {var opts = $(this).panel("options");$.extend(winD.options, {width: opts.width,height: opts.height,left: opts.left,top: opts.top});if (winD.shadow) {winD.shadow.css({left: winD.options.left,top: winD.options.top,width: winD.window._outerWidth(),height: winD.window._outerHeight()});}winD.options.onResize.call(jq, width, height);},//在窗口最小化之后触发onMinimize: function () {if (winD.shadow) {winD.shadow.hide();}if (winD.mask) {winD.mask.hide();}winD.options.onMinimize.call(jq);},//在面板折叠之前触发,返回false可以终止折叠操作onBeforeCollapse: function () {if (winD.options.onBeforeCollapse.call(jq) == false) {return false;}if (winD.shadow) {winD.shadow.hide();}},//在面板展开之后触发onExpand: function () {if (winD.shadow) {winD.shadow.show();}winD.options.onExpand.call(jq);}}));winD.window = win.panel("panel");if (winD.mask) {winD.mask.remove();}if (winD.options.modal == true) {winD.mask = $("<div class=\"window-mask\"></div>").insertAfter(winD.window);winD.mask.css({width: (winD.options.inline ? winD.mask.parent().width() : compatMode().width),height: (winD.options.inline ? winD.mask.parent().height() : compatMode().height),display: "none"});}if (winD.shadow) {winD.shadow.remove();}if (winD.options.shadow == true) {winD.shadow = $("<div class=\"window-shadow\"></div>").insertAfter(winD.window);winD.shadow.css({ display: "none" });}if (winD.options.left == null) {_hcenter(jq);}if (winD.options.top == null) {_vcenter(jq);}_move(jq);if (winD.options.closed == false) {win.window("open");}};//设置属性function setProperties(jq) {var win = $.data(jq, "window");//设置组件拖动
        win.window.draggable({handle: ">div.panel-header>div.panel-title",disabled: win.options.draggable == false,onStartDrag: function (e) {if (win.mask) {win.mask.css("z-index", $.fn.window.defaults.zIndex++);}if (win.shadow) {win.shadow.css("z-index", $.fn.window.defaults.zIndex++);}win.window.css("z-index", $.fn.window.defaults.zIndex++);if (!win.proxy) {win.proxy = $("<div class=\"window-proxy\"></div>").insertAfter(win.window);}win.proxy.css({display: "none",zIndex: $.fn.window.defaults.zIndex++,left: e.data.left,top: e.data.top});win.proxy._outerWidth(win.window._outerWidth());win.proxy._outerHeight(win.window._outerHeight());setTimeout(function () {if (win.proxy) {win.proxy.show();}}, 500);},onDrag: function (e) {win.proxy.css({display: "block",left: e.data.left,top: e.data.top});return false;},onStopDrag: function (e) {win.options.left = e.data.left;win.options.top = e.data.top;$(jq).window("move");win.proxy.remove();win.proxy = null;}});//设置组件拉伸
        win.window.resizable({disabled: win.options.resizable == false, onStartResize: function (e) {win.pmask = $("<div class=\"window-proxy-mask\"></div>").insertAfter(win.window);win.pmask.css({zIndex: $.fn.window.defaults.zIndex++,left: e.data.left,top: e.data.top,width: win.window._outerWidth(),height: win.window._outerHeight()});if (!win.proxy) {win.proxy = $("<div class=\"window-proxy\"></div>").insertAfter(win.window);}win.proxy.css({zIndex: $.fn.window.defaults.zIndex++,left: e.data.left,top: e.data.top});win.proxy._outerWidth(e.data.width);win.proxy._outerHeight(e.data.height);}, onResize: function (e) {win.proxy.css({ left: e.data.left, top: e.data.top });win.proxy._outerWidth(e.data.width);win.proxy._outerHeight(e.data.height);return false;}, onStopResize: function (e) {$.extend(win.options, {left: e.data.left,top: e.data.top,width: e.data.width,height: e.data.height});_resize(jq);win.pmask.remove();win.pmask = null;win.proxy.remove();win.proxy = null;}});};// 判断当前浏览器采用的渲染方式(兼容目前流行的全部浏览器)function compatMode() {//BackCompat:标准兼容模式关闭。//CSS1Compat:标准兼容模式开启。//当document.compatMode等于BackCompat时,浏览器客户区宽度是document.body.clientWidth;//当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth。//浏览器客户区高度、滚动条高度、滚动条的Left、滚动条的Top等等都是上面的情况。if (document.compatMode == "BackCompat") {return { width: Math.max(document.body.scrollWidth, document.body.clientWidth), height: Math.max(document.body.scrollHeight, document.body.clientHeight) };} else {return { width: Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth), height: Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight) };}};$(window).resize(function () {$("body>div.window-mask").css({width: $(window)._outerWidth(),height: $(window)._outerHeight()});setTimeout(function () {$("body>div.window-mask").css({// 判断当前浏览器采用的渲染方式
                width: compatMode().width,height: compatMode().height});}, 50);});//实例化组件$.fn.window = function (target, parm) {if (typeof target == "string") {var method = $.fn.window.methods[target];if (method) {return method(this, parm);} else {return this.panel(target, parm);}}target = target || {};return this.each(function () {var pwindow = $.data(this, "window");if (pwindow) {$.extend(pwindow.options, target);} else {pwindow = $.data(this, "window", {options: $.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),target)});if (!pwindow.options.inline) {document.body.appendChild(this);}}init(this);setProperties(this);});};//默认方法$.fn.window.methods = {//返回属性对象options: function (jq) {var opts = jq.panel("options");var options = $.data(jq[0], "window").options;return $.extend(options, {closed: opts.closed,collapsed: opts.collapsed,minimized: opts.minimized,maximized: opts.maximized});},//返回外部窗口对象window: function (jq) {return $.data(jq[0], "window").window;},//返回属性对象resize: function (jq, parm) {return jq.each(function () {_resize(this, parm);});},//移动面板到一个新位置move: function (jq, _position) {return jq.each(function () {_move(this, _position);});},//仅水平居中窗口hcenter: function (jq) {return jq.each(function () {_hcenter(this, true);});},//仅垂直居中窗口vcenter: function (jq) {return jq.each(function () {_vcenter(this, true);});},//将窗口绝对居中center: function (jq) {return jq.each(function () {_hcenter(this);_vcenter(this);_move(this);});}};//解析器配置$.fn.window.parseOptions = function (target) {return $.extend({}, $.fn.panel.parseOptions(target),$.parser.parseOptions(target,[{draggable: "boolean",resizable: "boolean",shadow: "boolean",modal: "boolean",inline: "boolean"}]));};//默认属性和事件$.fn.window.defaults = $.extend({},$.fn.panel.defaults,{zIndex: 9000,//窗口Z轴坐标draggable: true,//定义是否能够拖拽窗口resizable: true,//定义是否能够改变窗口大小shadow: true,//如果设置为true,在窗体显示的时候显示阴影modal: false,//定义是否将窗体显示为模式化窗口inline: false,//定义如何布局窗口,如果设置为true,窗口将显示在它的父容器中,否则将显示在所有元素的上面title: "New Window",//窗口的标题文本collapsible: true,//定义是否显示可折叠按钮minimizable: true,//定义是否显示最小化按钮maximizable: true,//定义是否显示最大化按钮closable: true,//定义是否显示关闭按钮closed: false//定义是否可以关闭窗口
        });
})(jQuery);

View Code

示例代码

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Basic Window - jQuery EasyUI Demo</title><link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css"><link rel="stylesheet" type="text/css" href="../../themes/icon.css"><link rel="stylesheet" type="text/css" href="../demo.css"><script type="text/javascript" src="../../jquery-1.8.0.min.js"></script><script src="../../plugins2/jquery.parser.js"></script><script src="../../plugins2/jquery.draggable.js"></script><script src="../../plugins2/jquery.resizable.js"></script><script src="../../plugins2/jquery.panel.js"></script><script src="../../plugins2/jquery.window.js"></script><!--  <script src="../../plugins/jquery.window.js"></script>-->
</head>
<body><h2>Basic Window</h2><div class="demo-info"><div class="demo-tip icon-tip"></div><div>Window can be dragged freely on screen.</div></div><div style="margin:10px 0;"><a href="javascript:void(0)" class="easyui-linkbutton" onclick="$('#w').window('open')">Open</a><a href="javascript:void(0)" class="easyui-linkbutton" onclick="$('#w').window('close')">Close</a></div><div id="w" class="easyui-window" title="Basic Window" data-options="iconCls:'icon-save'" style="width:500px;height:200px;padding:10px;">The window content.</div>
</body>
</html>

View Code

插件效果

转载于:https://www.cnblogs.com/DemoLee/p/3504866.html

easyui源码翻译1.32--Window(窗口)相关推荐

  1. easyui源码翻译1.32--Messager(消息窗口)

    前言 使用$.messager.defaults重写默认值对象.下载该插件翻译源码 消息窗口提供了不同的消息框风格,包含alert(警告框), confirm(确认框), prompt(提示框), p ...

  2. easyui源码翻译1.32--panel(面板)

    前言 昨天发布了表格datagrid的翻译源码 ,easyui的许多插件有依赖关系  比如datagrid 的渲染需要panel.resizable.linkbutton.pagination   今 ...

  3. easyui源码翻译1.32--ValidateBox(验证框)

    前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...

  4. easyui源码翻译1.32--SearchBox(搜索框)

    前言 使用$.fn.searchbox.defaults重写默认值对象.下载该插件翻译源码 搜索框提示用户需要输入搜索的值.它可以结合一个菜单,允许用户选择不同的搜索类别.在用户按下回车键或点击组件右 ...

  5. easyui源码翻译1.32--Resizable(调整大小)

    前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /*** jQuery EasyUI 1.3.2* *翻译:qq 1364386878 Resizab ...

  6. three.js源码翻译及案例(五)-GLTFLoader.js

    写在前面 Three中的加载脚本很多,但是核心思想是差不多的,就是文件用文件解析器加载,图片用图片解析器加载,然后json转换为对象,但是由于gltf格式可以自己编辑所以有的源码参考意义不大,glb及 ...

  7. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...

  8. ArrayList源码翻译

    ArrayList源码翻译 简介 属性解读 初始化 添加方法 get方法 set方法 remove方法 contains方法 clone方法 总结 简介 ArrayList 是 java 集合框架中比 ...

  9. jQuery Easyui 源码分析之combo组件

    /** * jQuery EasyUI 1.3.1 * 该源码完全由压缩码翻译而来,并非网络上放出的源码,请勿索要.*/ (function($) {function setSize(target, ...

最新文章

  1. python3 %%time 表示执行单元格时间 时间指的是CPU时间
  2. Linux内核自旋锁使用笔记
  3. SparkSQL愿景
  4. SpringBoot应用和PostgreSQL数据库部署到Kubernetes上的一个例子
  5. Sybase常用配置参数
  6. Python-while 计算100以内奇数和
  7. oracle数据库sql语句插入时间信息
  8. 未来计算机的新技术有哪些,科技改变生活!人类未来的十大高科技生活
  9. 彩虹易支付最新版开源版源码分享
  10. 阿拉伯数字转中文数字(大写或小写)
  11. 电脑的Mac地址怎么查看
  12. tpshop 微信提现转账
  13. 亲测好用的PS图片无损放大插件:Blow Up 3 for Mac
  14. 常见主从复制报错处理案例
  15. MySQL Binlog 解析工具 Maxwell 详解
  16. 上海合宙Luat 模块 Air724开发板 入门指南(1)
  17. 深度学习研究理解:OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
  18. Qt计算器——功能完整的计算器
  19. 解决主机与VM虚拟机不能复制粘贴的三种方法
  20. 细说“客户满意率”与“客户满意度”

热门文章

  1. [转]浅谈 python multiprocessing(多进程)下如何共享变量
  2. 4个关于中台最常见的误区,用最通俗的话给你一次解释清楚
  3. destoon php os,destoon运行流程二次开发必看
  4. java+web提交sumbit,jsp怎么让submit不提交
  5. 小米8吃鸡战斗服务器响应超时,小米8使用1天真实体验,看完再决定买不买?
  6. sap把系统内部直接写入到自建表_特斯拉放弃SAP后,仅四个月就开发了套ERP
  7. 计算机算法设计与分析 大整数乘法
  8. 教我兄弟学Android逆向
  9. TensorFlow:tensorflow之CIFAR10与ResNet18实战
  10. pytorch学习笔记(二十六):NIN