├── doc ├── code.jpg ├── logo.png ├── hello.png ├── child.html ├── iframe.html ├── topopen.html ├── layxjs.html ├── layxcss.html ├── help.html ├── doc.css ├── doc.js ├── doc.html └── index.html ├── bundleconfig.json ├── LICENSE ├── README.md ├── layx.min.css └── layx.css /doc/code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monksoul/Layx/HEAD/doc/code.jpg -------------------------------------------------------------------------------- /doc/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monksoul/Layx/HEAD/doc/logo.png -------------------------------------------------------------------------------- /doc/hello.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monksoul/Layx/HEAD/doc/hello.png -------------------------------------------------------------------------------- /bundleconfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "outputFileName": "layx.min.js", 4 | "inputFiles": [ 5 | "layx.js" 6 | ] 7 | }, 8 | { 9 | "outputFileName": "layx.min.css", 10 | "inputFiles": [ 11 | "layx.css" 12 | ] 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 百小僧 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /doc/child.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 |33 | 1. 如何在iframe页面中关闭当前窗口? 34 |
parent.layx.destroy(id); // 方法一(推荐) 35 | top.layx.destroy(id); // 方法二 36 |37 |
40 | 2. 如何在iframe页面中动态获取窗口 id? 41 |
42 |function getLayxId() {
43 | var id;
44 | if (self != top && self.frameElement && self.frameElement.tagName == "IFRAME") {
45 | var layxWindow = $(self.frameElement).parents(".layx-window");
46 | id = layxWindow.attr("id").substr(5);
47 | }
48 | return id;
49 | }
50 |
51 |
52 | 53 | 3. 如何动态设置iframe窗口大小? 54 |
parent.layx.setSize(getLayxId(),{width:1000,height:500}); // 在iframe页面调用
55 |
56 |
57 | Layx 新一代Web弹窗组件。
105 |gzip压缩版仅 ,非常小巧。
106 |
273 | - [修复] 关闭窗口、最小化窗口不能恢复页面滚动动态bug,感谢 QQ:869943174 274 |275 |
277 | - [修复] 储存窗口大小位置bug,感谢 QQ:315976369 278 |279 |
281 | - [修复] useFrameTitle:true bug,感谢 #7 282 | - [修复] 窗口百分比居中bug,感谢 QQ:1034937343 283 |284 |
286 | - [新增] layx.setSize(id,area) 方法,可以动态设置窗口宽度、高度 287 | - [新增] 【常见问题】栏目 288 |289 |
291 | - [新增] options.existFlicker参数,可以配置是否开启窗口存在闪烁 292 | - [新增] options.enableDomainFocus参数,设置是否支持跨域点击,默认为true,建议设置为false 293 | - [新增] 强制关闭窗口方法:layx.destroy(id,params,force),设置force为true表示强制关闭 294 | - [更新] 代码优化 295 | - [修复] alert窗口滚动条 bug 296 | - [修复] 自动获取iframe标题 bug 297 | - [修复] iframe窗口焦点事件 bug 298 | - [修复] 合并窗口组样式 bug 299 |300 |
302 | - [新增] options.buttonKey 配置按钮快捷键,支持enter和ctrl+enter 303 | - [更新] 输入框prompt快捷键为:Ctrl+Enter,避免和多行文本textarea换行冲突 304 | - [修复] confirm,prompt 冒泡bug 305 | - [修复] 输入框prompt 回车值为null bug 306 |307 |
309 | - [新增] 有操作按钮的窗口都能触发回车操作 310 | - [更新] 禁止操作按钮文本选中 311 | - [修复] 修复监听回车操作bug 312 |313 |
315 | - [新增] options.focusToReveal 参数,设置是否获取焦点后前置 316 | - [新增] options.dialogType 内置参数,配置alert,prompt,confirm支持Enter回车键触发按钮 317 | - [更新] layx.max最大化机制,支持最大化后再次最大化,适应浏览器大小调整后自动自适应 318 | - [更新] 记录窗口位置采用localStorge存储,之前采用sessionStorge 319 | - [修复] layx窗口点击冒泡 bug 320 | - [修复] layx.setPosition不能记住当前位置 bug 321 | - [修复] 最大化还显示圆角bug 322 |323 |
325 | - [更新] layx.css 去除无关代码,加强layx.css 样式内聚性 326 | - [更新] 窗口最大化时应该禁止圆角,确保最大化覆盖页面 327 | - [更新] 窗口组点击切换时有延迟 328 | - [更新] alert、msg、tip、confirm、prompt代码 329 | - [修复] css vh/vw 单位 转换bug 330 | - [修复] layx.setPosition之后刷新页面不能保存当前位置 331 |332 |
334 | - [新增] 新增 tip 提示窗口 335 | - [新增] options.skin 内置皮肤设置,支持default、cloud、turquoise、river、asphalt 336 | - [新增] 自定义皮肤功能 337 | - [新增] options.borderRadius 圆角设置 338 | - [新增] 阻隔层禁止右键,避免恶意修改 339 | - [更新] 网页窗口加载代码 340 | - [更新] 浮动窗口气泡自适应主题功能 341 | - [修复] top.layx打开新窗口被遮盖 bug 342 | - [修复] 窗口焦点事件触发多次 bug 343 | - [修复] 同域网页窗口ESC快捷键无作用 bug 344 | - [修复] 窗口禁止冒泡触发焦点事件 bug 345 | - [修复] 只读窗口、阻隔层右键不兼容 bug 346 | - [修复] 只读窗口不能获取焦点 bug 347 | - [修复] 窗口禁止获取焦点后还能触发置顶和事件 bug 348 | - [修复] 窗口图标不对齐 bug 349 | - [修复] 加载动画 火狐、Safari旧浏览器样式 bug 350 | - [修复] bootstrap、Element UI等第三方UI样式冲突 bug 351 | - [修复] 文本窗口、页面窗口、窗口组窗口 onload事件 bug 352 |353 |
355 | - [新增] options.readonly 参数,设置窗口为只读类型 356 | - [新增] options.shadeDestroy参数,用来设置点击阻隔空白区域关闭窗口 357 | - [新增] options.shadable 支持背景透明度设置,取值范围:0-1 358 | - [新增] css3 vh、vw单位支持,特用于width,height,minWidth,minHeight使用 359 | - [更新] layx.css 兼容处理 360 | - [修复] 网页窗口加载失败后加载提示不能隐藏 bug 361 | - [修复] 自定义loadingText bug 362 | - [修复] file:协议 bug 363 |364 |
366 | - [新增] 窗口组 options.preload参数,可以设置窗口组预加载个数 367 | - [新增] 双击窗口图标关闭窗口 368 | - [新增] 浮动窗自适应功能 369 | - [新增] 窗口拖动方向为左、右、下边时最大拖动都必须留15px位置 370 | - [新增] options.dragInTopToMax 用来设置是否拖动到顶部自动最大化 371 | - [更新] 加载窗口代码、新增加载动画 372 | - [更新] layx.css 样式表 373 | - [更新] 加载内容特效 374 | - [修复] 窗口拖出可视窗口顶部 bug 375 | - [修复] IOS系统safari浏览器点击屏幕闪动 bug 376 | - [修复] 设置文本窗口内容、窗口组文本窗口内容 取用模式 bug 377 |378 |
380 | - [新增] layx.getElementPos(el) 方法,获取元素绝对坐标 381 | - [新增] layx.destroyInlay(id); 内部关闭窗口方法,相当于点击了 关闭按钮 关闭 382 | - [新增] layx.checkVisual(pEle, ele, isAllCheck); 方法,判断元素是否在某个元素内部并且可见!(也就是屏幕能够看到它) 383 | - [新增] layx.getButton(id,buttonId); 方法,用来获取状态栏按钮Element对象 384 | - [更新] layx.css 样式,支持Electron无边框窗口拖曳 385 | - [更新] 浮动窗窗口示例、支持浮动窗口屏幕不可见时隐藏,可见时显示 386 | - [修复] cloneElementContent:false bug387 |
389 | - [新增] ESC关闭获取焦点的窗口 390 | - [新增] options.escKey 开关,设置是否启用esc关闭窗口功能 391 | - [新增] event.ondestroy.before参数 escKey,表示是否按下esc键 392 | - [新增] 自动判断拷贝DOM元素如果display:none自动设置为显示 393 | - [新增] 提示框图标设置 394 | - [新增] options.dialogIcon,设置提示框图标,支持alert,confirm,msg 395 | - [新增] 按钮title提示 396 | - [更新] 触摸代码、新增触摸电脑的支持(同时支持鼠标、触摸) 397 | - [修复] 文本窗口不触发焦点事件 bug 398 | - [修复] 点击状态栏按钮层不能置顶bug 399 | - [修复] IOS系统Safari不支持iFrame bug 400 | - [修复] 最小化样式超出 bug401 |
403 | - [新增] 移动端拖动窗口、拖曳大小支持,划时代的更新!!!! 404 | - [更新] 样式表支持移动端处理 405 | - [更新] 取消拖曳窗口、拖动窗口屏蔽滚动条事件 406 | - [更新] 控制栏点击事件代码、新增移动端事件判断处理407 |
409 | - [新增] 浮动窗口方向控制(上、下、左、右) 410 | - [新增] 窗口组切换前后事件 event.onswitch 411 | - [更新] 拖曳容器代码 412 | - [更新] layx.updateFloatTargetPosition(id) 为 layx.updateFloatWinPosition(id,direction); 413 | - [更新] 窗口组切换代码 414 | - [更新] 拖曳容器样式 415 | - [修复] layx.prompt 默认值 bug 416 | - [修复] layx.load 加载 bug417 |
419 | - [新增] 浮动窗口类型 420 | - [新增] 浮动窗口options.floatTarget参数,floatTarget 用来设置吸附到那个元素上 421 | - [新增] options.mergeTitle 参数,表示窗口组标题是合并还是不合并 422 | - [新增] 窗口调试信息按钮,开发阶段非常方便调试工作 423 | - [新增] 窗口最小化状态下不显示置顶按钮、调试按钮 424 | - [新增] 更新浮动窗口位置方法 layx.updateFloatTargetPosition(id); 425 | - [新增] 设置窗口位置 layx.setPosition(id,position,isFloatTarget); isFloatTarget 参数,用来判断是否是浮动窗口 426 | - [新增] event.onvisual 事件,控制窗口显示隐藏,有区别于销毁 427 | - [新增] layx.visual(id, status, params) 方法,控制窗口显示隐藏 428 | - [更新] winform.windowId为winform.layxWindowId,winform.window为layxWindow 429 | - [更新] 恢复提示为:还原 430 | - [更新] 窗口组样式 431 | - [修复] 定时器 bug 432 | - [修复] 拖动、最大化滚动条 bug 433 | - [修复] IE10 bug434 |
436 | - [新增] 窗口冒泡默认处理方法 437 | - [新增] 输入框prompt 默认值设置 438 | - [新增] 窗口存在事件event.onexist,常用于窗口已经打开刷新URL操作 439 | - [新增] 提示框、消息框、询问框、输入框、加载框 宽度高度自适应功能 440 | - [新增] buttons配置参数id、classes、style属性、提供按钮更多定制功能 441 | - [新增] buttons配置参数callback中提供按钮自身DOM对象 442 | - [新增] buttons配置参数callback中提供按钮event对象,用来处理冒泡事件和默认事件 443 | - [新增] ondestroy.before回调参数inside参数,用来判断是点击内置按钮关闭还是用户调用关闭 444 | - [新增] ondestroy.before回调参数params参数,记录用户关闭传递的参数 445 | - [新增] 操作按钮启用、禁用操作 setButtonStatus(id, buttonId, isEnable); 446 | - [更新] layx.destroy方法,新增params参数,可关闭之前传递参数,常用于event.ondestroy.before中判断 447 | - [更新] 提示框、消息框、询问框、输入框、加载框生成代码 448 | - [更新] 窗口最小宽度、最小高度为200 449 | - [修复] 手机IOS自带浏览器滚动条bug 450 | - [修复] 按钮冒泡事件 bug451 |
453 | - [新增] storeStatus 配置参数,记录窗口位置信息,即使刷新页面还能保存(基于sessionStorage存储) 454 | - [新增] isOverToMax 配置参数、控制初始化窗口时 超出可视区域自动最大化 455 | - [新增] 支持跨域网站获取焦点事件 456 | - [新增] onfocus焦点事件监听 457 | - [更新] 拖动窗口、拖曳窗口流畅度 458 | - [更新] layx.css样式,添加各个浏览器兼容性处理 459 | - [更新] layx.js 代码 460 | - [修复] Firefox Developer Edition 版本关闭 bug461 |
463 | - [新增] cloneElementContent 参数,可配置 HTMLElement 是拷贝模式还是取用模式 464 | - [新增] 多行字符串处理方法 465 | - [新增] 内容正在加载中动态提示 466 | - [新增] 重载页面窗口方法 467 | - [更新] 提示框、询问框 内容内容对齐方式 468 | - [修复] 禁用窗口最大化后拖曳到顶部再拖下来位置错误 bug 469 | - [修复] 禁用恢复操作后窗口最大化状态往下拖动窗口位置错误 bug 470 | - [修复] 内容窗口滚动条 bug 471 | - [修复] 内容窗口内容高度不自动高度 bug 472 | - [修复] 窗口组不传默认索引出错bug, 默认为0,也就是第一个 473 | - [修复] 禁用窗口调整大小后拖曳到顶部还能最大化 bug 474 | - [修复] 加载完成触发两次 bug 475 | - [修复] 提示框、消息框、询问框、加载框、输入框 事件不应用 bug 476 | - [修复] 页面窗口加载监听机制中遮罩对象获取错误 bug 477 | - [修复] 窗口处于最小化或最大化时还能最小化,最大化 bug 478 | - [修复] 设置窗口位置 bug 479 | - [修复] 设置页面窗口地址时不显示 加载遮罩层 bug 480 | - [修复] frames、buttons 不能深度复制对象 bug 481 | - [修复] 设置窗口组文本内容、URL内容 bug482 |
484 | - [新增] 窗口组类型 485 | - [新增] frames,frameIndex 配置参数 486 | - [新增] setGroupContent,setGroupTitle,setGroupUrl,setGroupIndex,group方法 487 | - [更新] layx.css 样式表 488 | - [修复] 最小化样式 489 | - [修复] 窗口组加载完成bug490 |
492 | - [新增] buttons 配置属性 493 | - [更新] 提示框、询问框、输入框代码494 |
496 | - [新增] style 参数,可以嵌入css样式表 497 | - [新增] 打开新窗口时如果可视区域小于窗口初始化宽高度,默认最大化 498 | - [修复] 拖动层、拖曳层调整大小多窗口冲突bug 499 | - [修复] 部分浏览器页面窗口不能自适应 bug 500 | - [修复] 文本窗口样式被全局应用 bug501 |
503 | - [新增] var winform = layx.html(id,title,content,options) 快捷打开文本窗口方法 504 | - [新增] var winform = layx.iframe(id,title,url,options) 快捷打开网页窗口方法 505 | - [新增] 窗口自动关闭文本可自定义功能:autodestroyText 506 | - [新增] 打开一个存在的窗口时窗口闪烁获取焦点 507 | - [更新] 调整最小化后显示宽度为:240px 508 | - [修复] 点击文本窗口内容无法置顶 bug 509 | - [修复] 置顶按钮点击切换 title 提示 bug 510 | - [修复] 置顶层带有阻隔层时没有阻隔的bug 511 | - [修复] 低版本Chrome 浏览器bug512 |
514 | - [新增] v2.0.0 正式发布515 |
517 | - [新增] v1.0.0 正式发布518 |
589 | - [修复] 关闭窗口、最小化窗口不能恢复页面滚动动态bug,感谢 QQ:869943174 590 |591 | */ }), { 592 | floatTarget: logBtn, 593 | width: 320, 594 | height: 150, 595 | minHeight: 110, 596 | alwaysOnTop: true, 597 | floatDirection: 'top', 598 | autodestroy: 10000, 599 | event: { 600 | ondestroy: { 601 | before: function (layxWindow, winform, params, inside, escKey) { 602 | if (inside === false) { 603 | layx.visual(winform.id, false); 604 | layx.updateFloatWinPosition(winform.id); 605 | return false; 606 | } 607 | } 608 | }, 609 | onexist: function (layxWindow, winform) { 610 | layx.visual(winform.id, true); 611 | } 612 | } 613 | }); 614 | 615 | var demoHtml = document.getElementById("layx-layx-demo-html"); 616 | if (demoHtml) { 617 | demoHtml.onscroll = function () { 618 | updateFloat(this); 619 | } 620 | } 621 | 622 | window.onscroll = function () { 623 | layx.updateFloatWinPosition("float-log"); 624 | } 625 | } 626 | var runs = document.querySelectorAll(".run"); 627 | for (var i = 0; i < runs.length; i++) { 628 | runs[i].onclick = function (e) { 629 | e = e || window.event; 630 | var pre = this.parentNode.querySelector("pre"); 631 | eval(pre.innerText); 632 | e.stopPropagation(); 633 | }; 634 | } 635 | var toc = document.querySelector("#toc"); 636 | var code = document.querySelector("#layx-layx-demo-html"); 637 | code = code ? code : document.body; 638 | var hTitles = this.document.querySelectorAll("#code h1,#code h2,#code h3,#code h4,#code h5,#code h6"); 639 | for (var i = 0; i < hTitles.length; i++) { 640 | var a = document.createElement("a"); 641 | a.classList.add("toc-title"); 642 | a.setAttribute("data-type", hTitles[i].tagName.toLowerCase()); 643 | a.innerHTML = hTitles[i].innerHTML; 644 | a.onclick = function (e) { 645 | e = e || window.event; 646 | var scrollDiv = code.querySelector("*[name='" + this.innerHTML + "']"); 647 | if (self != top && self.frameElement && self.frameElement.tagName == "IFRAME") { 648 | if (navigator.userAgent.indexOf("Firefox") > 0 || window.navigator.userAgent.toLowerCase().indexOf('iphone') > -1 || !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) { 649 | (document.documentElement || document.body).scrollTop = scrollDiv.offsetTop - window.innerHeight - 50; 650 | if (window.navigator.userAgent.toLowerCase().indexOf('iphone') > -1 || !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) { 651 | code.style["-webkit-overflow-scrolling"] = "auto"; 652 | code.scrollTop = scrollDiv.offsetTop - window.innerHeight - 50; 653 | code.style["-webkit-overflow-scrolling"] = "none"; 654 | } 655 | } 656 | else { 657 | (document.documentElement || document.body).scrollTop = scrollDiv.offsetTop; 658 | code.scrollTop = scrollDiv.offsetTop; 659 | } 660 | } 661 | else { 662 | if (navigator.userAgent.indexOf("Firefox") > 0 || window.navigator.userAgent.toLowerCase().indexOf('iphone') > -1 || !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) { 663 | code.scrollTop = scrollDiv.offsetTop - code.offsetHeight - 50; 664 | } 665 | else { 666 | code.scrollTop = scrollDiv.offsetTop; 667 | } 668 | } 669 | document.querySelector('#mulu').click(); 670 | e.stopPropagation(); 671 | }; 672 | toc.appendChild(a); 673 | } 674 | document.querySelector('#mulu').onclick = function (e) { 675 | if (window.getComputedStyle(toc).display === "none") { 676 | this.innerText = "关闭导航"; 677 | toc.style.display = "block"; 678 | } else { 679 | this.innerText = "目录导航"; 680 | toc.style.display = "none"; 681 | } 682 | }; 683 | }; -------------------------------------------------------------------------------- /doc/doc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
<link href="layx.min.css" rel="stylesheet" type="text/css" />32 |
<script src="layx.min.js" type="text/javascript"></script>33 |
layx.html('str','字符串文本','Hello Layx!');
36 | ct:正中间 137 | lt:左上角 138 | rt:右上角 139 | lb:左下角 140 | rb:右下角 141 | lc:左中间 142 | rc:右中间 143 | tc:上中间 144 | bc:下中间 145 | 也可以传入 [100,200] 数组类型,组合数组类型 ['tc',20]146 |
default 228 | cloud 229 | turquoise 230 | river 231 | asphalt 232 |233 |
html:文本类型 252 | url:页面类型 253 | group:窗口组类型 254 | 255 | 目前所有的窗口都是通过设定 type实现的256 |
success:成功图标 266 | warn:警告图标 267 | error:错误图标 268 | help: 帮助图标269 |
top:上边 288 | left:左边 289 | right:右边 290 | bottom:下边 291 |292 |
0:完全透明 392 | 1:不透明 393 | 0.5:半透明394 |
{
556 | t: false, // 是否限制上边拖曳大小,false不限制
557 | r: false, // 是否限制右边拖曳大小,false不限制
558 | b: false, // 是否限制下边拖曳大小,false不限制
559 | l: false, // 是否限制左边拖曳大小,false不限制
560 | lt: false, // 是否限制左上边拖曳大小,false不限制
561 | rt: false, // 是否限制右上边拖曳大小,false不限制
562 | lb: false, // 是否限制左下边拖曳大小,false不限制
563 | rb: false // 是否限制右下边拖曳大小,false不限制
564 | }
565 | 说明:支持 8 个方向拖曳改变窗口大小。
566 | {
611 | vertical: false, // 是否禁止垂直拖动,false不禁止
612 | horizontal: false, // 是否禁止水平拖动,false不禁止
613 | leftOut: true, // 是否允许左边拖出,true允许
614 | rightOut: true, // 是否允许右边拖出,true允许
615 | topOut: true, // 是否允许上边拖出,true允许,此设置不管是false还是true,窗口都不能拖出窗体
616 | bottomOut: true, // 是否允许下边拖出,true允许
617 | }
618 | 说明:支持控制窗口拖动方向及拖出属性。
619 | {
674 | // 加载事件
675 | onload: {
676 | // 加载之前,return false 不执行
677 | before: function (layxWindow, winform) {
678 | },
679 | // 加载之后
680 | after: function (layxWindow, winform) {
681 | }
682 | },
683 | // 最小化事件
684 | onmin: {
685 | // 最小化之前,return false 不执行
686 | before: function (layxWindow, winform) {
687 | },
688 | // 最小化之后
689 | after: function (layxWindow, winform) {
690 | }
691 | },
692 | // 最大化事件
693 | onmax: {
694 | // 最大化之前,return false 不执行
695 | before: function (layxWindow, winform) {
696 | },
697 | // 最大化之后
698 | after: function (layxWindow, winform) {
699 | }
700 | },
701 | // 恢复事件
702 | onrestore: {
703 | // 恢复之前,return false 不执行
704 | before: function (layxWindow, winform) {
705 | },
706 | // 恢复之后
707 | after: function (layxWindow, winform) {
708 | }
709 | },
710 | // 关闭事件
711 | ondestroy: {
712 | // 关闭之前,return false 不执行,inside 区分用户点击内置关闭按钮还是自动调用,用户关闭之前传递的参数,escKey表示是否是按下esc触发
713 | before: function (layxWindow, winform,params,inside,escKey) {
714 | },
715 | // 关闭之后
716 | after: function () {
717 | }
718 | },
719 | // 隐藏/显示窗口时间,return false不执行
720 | onvisual: {
721 | before: function (layxWindow, winform, params, inside, status) { },
722 | after: function (layxWindow, winform, status) { }
723 | },
724 | // 移动事件
725 | onmove: {
726 | // 移动之前,return false 不执行
727 | before: function (layxWindow, winform) {
728 | },
729 | // 移动中
730 | progress: function (layxWindow, winform) {
731 | },
732 | // 移动之后
733 | after: function (layxWindow, winform) {
734 | }
735 | },
736 | // 拖曳事件
737 | onresize: {
738 | // 拖曳之前,return false 不执行
739 | before: function (layxWindow, winform) {
740 | },
741 | // 拖曳中
742 | progress: function (layxWindow, winform) {
743 | },
744 | // 拖曳之后
745 | after: function (layxWindow, winform) {
746 | }
747 | },
748 | // 获取焦点事件、return false 不置顶
749 | onfocus: function (layxWindow, winform) {
750 | },
751 | // 窗口存在事件
752 | onexist: function (layxWindow, winform) {
753 | },
754 | // 窗口组切换事件
755 | onswitch: {
756 | // 切换之前,return false 不执行操作
757 | before: function (layxWindow, winform, frameId) {
758 | },
759 | // 切换之后
760 | after: function (layxWindow, winform, frameId) {
761 | }
762 | },
763 | // 置顶事件
764 | onstick: {
765 | // 置顶之前,return false 不执行操作
766 | before: function (layxWindow, winform) {
767 | },
768 | // 置顶之后
769 | after: function (layxWindow, winform) {
770 | }
771 | }
772 | }
773 | 说明:监听窗口事件
774 | // 普通按钮回调函数
821 | callback:function(id, button, event){
822 | }
823 |
824 | // 输入框按钮回调函数
825 | callback:function(id,value,textarea, button, event){
826 | }
827 |
828 | html:文本类型 857 | url:页面类型858 |
winform.id // Id
911 | winform.title // 标题
912 | winform.layxWindowId // layxWindow对象id属性
913 | winform.layxWindow // layxWindow 对象
914 | winform.createDate // 创建时间
915 | winform.status // 状态:min、max、normal
916 | winform.type // 窗口类型
917 | winform.frames // 窗口组窗口数组
918 | winform.useFrameTitle // 标题应用模式
919 | winform.cloneElementContent // 内容拷贝模式
920 | winform.groupCurrentId // 当前窗口组索引
921 | winform.area // 位置大小 { width , height , minWidth , minHeight , top , left}
922 | winform.loadingText // 加载文本
923 | winform.focusable // 焦点状态
924 | winform.isFloatTarget // 是否浮动窗口
925 | winform.floatTarget // 吸附的DOM对象
926 | winform.url // 窗口url地址
927 | winform.content // 窗口内容
928 | winform.isStick // 置顶状态
929 | winform.zIndex // 层级别
930 | winform.movable // 拖动状态
931 | winform.moveLimit // 拖动限制
932 | winform.resizable // 拖曳状态
933 | winform.resizeLimit // 拖曳大小限制
934 | winform.stickable // 置顶操作
935 | winform.minable // 最小化操作
936 | winform.maxable // 最大化操作
937 | winform.restorable // 恢复操作
938 | winform.closable // 关闭操作
939 | winform.event // 窗口事件
940 |
941 | var version = layx.v;944 |
var winform = layx.open(options);946 |
var winform = layx.html(id, title, content, options);948 |
var winform = layx.iframe(id, title, url, options);950 |
var winform = layx.group(id, frames, frameIndex, options);952 |
var windows = layx.windows();954 |
var winform = layx.getWindow(id);956 |
layx.destroy(id,params,force); // 设置了params参数,可以在event.ondestroy.before中监听;force表示强制关闭窗口,也就是return false失效。958 |
layx.visual(id, status, params); // status:true显示,false隐藏。设置了params参数,可以在event.onvisual.before中监听960 |
layx.min(id);962 |
layx.max(id);964 |
layx.setTitle(id, title, useFrameTitle);966 |
layx.flicker(id);968 |
layx.restore(id);970 |
layx.updateMinLayout();972 |
layx.stickToggle(id);974 |
layx.setPosition(id, position,isFloatTarget); // ,isFloatTarget 是否是浮动窗口976 |
layx.setSize(id, area); // ,area为json对象 {width:300,height:300}
978 | layx.updateFloatWinPosition(id,direction); // direction,浮动方向980 |
var contentWindow = layx.getFrameContext(id);982 |
var contentWindow = layx.getGroupFrameContext(id, frameId); // frameId:窗口组窗口id984 |
var parentContentWindow = layx.getParentContext(id);986 |
layx.setContent(id,content, cloneElementContent);988 |
layx.setUrl(id,url);990 |
layx.setGroupContent(id,frameId,content, cloneElementContent); // frameId:窗口组窗口id992 |
layx.setGroupTitle(id, frameId, title, useFrameTitle); // frameId:窗口组窗口id994 |
layx.setGroupUrl(id, frameId, url); // frameId:窗口组窗口id996 |
layx.setGroupIndex(id, frameId); // frameId:窗口组窗口id998 |
layx.destroyAll(); // closable:false 不可关闭1000 |
layx.tip(msg, target, direction, options);1002 |
layx.msg(msg, options);1004 |
layx.msg(title, msg, yes, options); // yes 默认确定按钮回调函数1006 |
layx.confirm(title, msg, yes, options); // yes 默认确定按钮回调函数1008 |
var textarea = layx.getPromptTextArea(id);1010 |
layx.prompt(title, msg, yes,defaultValue, options); // yes 默认确定按钮回调函数 defaultValue 默认值1012 |
layx.load(id,msg, options);1014 |
var mulitStr = layx.multiLine(f); // f:function(){/* 你的多行代码 */}
1016 | layx.reloadFrame(id);1018 |
layx.reloadGroupFrame(id,frameId); // frameId:窗口组窗口id1020 |
layx.setButtonStatus(id, buttonId, isEnable) // buttonId:按钮Id1022 |
var pos = layx.getElementPos(el); // { x:'',y:''}
1024 | layx.destroyInlay(id);1026 |
layx.checkVisual(pEle, ele, allContain); // pEle:区域;ele:元素;allContain 表示是否完全包含,设置false时,只要元素在区域有任何可见都返回true1028 |
var btn = layx.getButton(id,buttonId); // 按钮Id1030 |
document.getElementById('btn').onclick=function(e){
1034 | e=e||window.event;
1035 |
1036 | // 打开新窗口代码
1037 |
1038 | // 停止冒泡
1039 | e.stopPropagation();
1040 | }
1041 | /* 窗口 */
1045 | .layx-window.layx-皮肤名称-river {
1046 | }
1047 | /* 标题栏 */
1048 | .layx-window.layx-skin-皮肤名称 .layx-control-bar {
1049 | }
1050 | /* 内部按钮激活 */
1051 | .layx-window.layx-skin-皮肤名称 .layx-inlay-menus .layx-icon:hover {
1052 | }
1053 | /* 底部工具栏按钮 */
1054 | .layx-window.layx-skin-皮肤名称 .layx-button-item {
1055 | }
1056 | /* 底部工具栏按钮激活 */
1057 | .layx-window.layx-skin-皮肤名称 .layx-button-item:hover {
1058 | }
1059 | layx.iframe('radiu-style','自定义外观,比如圆角','./iframe.html',{
1062 | style:layx.multiLine(function(){/*
1063 |
1064 | #layx-radiu-style{
1065 | border-radius:4px;
1066 | -webkit-border-radius:4px;
1067 | -moz-border-radius:4px;
1068 | -ms-border-radius:4px;
1069 | }
1070 |
1071 | #layx-radiu-style .layx-window-icon{
1072 | color:#f00;
1073 | }
1074 |
1075 | */})
1076 | });
1077 |
1078 | layx.html('str','字符串文本','Hello Layx!');
26 |
27 | layx.html('dom','HTMLElement 窗口',document.getElementById('dom'));
31 | Layx 新一代Web弹窗组件。
32 | 33 |layx.html('dom-get','HTMLElement 窗口',document.getElementById('dom-get'),{cloneElementContent:false});
37 | 
layx.html('htmlstr','HTML字符串窗口',layx.multiLine(function () {/*
48 |
49 | <style type="text/css">
50 | #about-layx{
51 | padding:10px;
52 | line-height:1.5;
53 | }
54 |
55 | #about-layx h2{
56 | border-bottom:1px solid #ccc;
57 | }
58 |
59 | #about-layx label {
60 | margin: 0 2px;
61 | padding: 0 5px;
62 | white-space: nowrap;
63 | border: 0;
64 | background-color: #f8f8f8;
65 | border-radius: 3px;
66 | display:inline-block;
67 | }
68 | </style>
69 |
70 | <div id="about-layx">
71 | <h2>序言</h2>
72 | <p>Layx 诞生于一次C/S架构系统往B/S架构系统迁移项目中。起初,我们想在B/S架构上实现类C/S架构窗口功能,但百度、谷歌过后依然没能找到合适的Javascript插件。于是乎在2018年05月01日五一劳动节期间连夜赶工创造出了 Layx 。</p>
73 | <p>目前 Layx 拥有和C/S架构一样灵活的操作方式,支持网页多窗口、多任务协同操作,支持窗口各种事件。</p>
74 | <h2>信息</h2>
75 | <ul>
76 | <li><label>原创作者</label>:百小僧</li>
77 | <li><label>开源协议</label>:MIT</li>
78 | <li><label>当前版本</label>:v2.5.0</li>
79 | <li><label>发布日期</label>:2018.09.17</li>
80 | <li><label>交流Q群</label>:18863883</li>
81 | <li><label>版权所有</label>:百签软件(中山)有限公司</li>
82 | </ul>
83 | <h2>特性</h2>
84 | <ul>
85 | <li>纯原生Javascript实现,不依赖任何第三方框架</li>
86 | <li>支持IE10+(含IE10)、Chrome、Firefox、Opera、Edge等主流浏览器</li>
87 | <li>支持多种窗口类型:文本窗口,页面窗口,窗口组,提示窗口,消息窗口,询问窗口,输入窗口,加载窗口</li>
88 | <li>支持窗口最大化、最小化、恢复、置顶、关闭控制及事件监听</li>
89 | <li>支持窗口阻隔、窗口闪烁功能</li>
90 | <li>支持窗口点击标题获取焦点、点击内容/页面获取焦点</li>
91 | <li>支持窗口图标定制、操作按钮定制</li>
92 | <li>支持窗口四个方向拖动及方向控制</li>
93 | <li>支持窗口八个方向拖曳大小及拖曳方向控制</li>
94 | <li>支持窗口自动获取页面标题</li>
95 | <li>支持窗口位置记录及恢复</li>
96 | <li>支持窗口相互通讯</li>
97 | <li>支持窗口设定自动关闭</li>
98 | <li>支持窗口外观控制、状态栏、透明度控制</li>
99 | <li>支持窗口操作拦截器、可以拦截任何不正常操作</li>
100 | <li>支持窗口初始化位置、宽高度、最小化宽高度控制</li>
101 | <li>支持窗口加载文字控制</li>
102 | <li>支持窗口滚动条自能判断</li>
103 | <li>支持窗口最小化统一管理</li>
104 | <li>支持滚动条智能判断</li>
105 | </ul>
106 | <h2>项目</h2>
107 | <ul>
108 | <li>Gitee:<a href="https://gitee.com/monksoul/LayX" target="_blank">https://gitee.com/monksoul/LayX</a></li>
109 | <li>Github:<a href="https://github.com/MonkSoul/Layx" target="_blank">https://github.com/MonkSoul/Layx</a></li>
110 | </ul>
111 | <h2>捐赠</h2>
112 | <p>如果 Layx 对您有帮助,可以请 作者 喝杯咖啡</p>
113 | <img src="./code.jpg" style="width:100%;display:block;" />
114 | </div>
115 |
116 | */}));
117 |
118 | layx.iframe('localsite','本地网页','./iframe.html');
123 |
124 | layx.iframe('taobaosite','百度官网','https://www.baidu.com');
128 |
129 | layx.tip('Layx 新一代Web弹窗组件.',document.getElementById('tip-top'),'top');
135 | layx.tip('Layx 新一代Web弹窗组件.',document.getElementById('tip-bottom'),'bottom');
140 | layx.tip('Layx 新一代Web弹窗组件.',document.getElementById('tip-left'),'left');
145 | layx.tip('Layx 新一代Web弹窗组件.',document.getElementById('tip-right'),'right');
150 | layx.msg('Layx 新一代Web弹窗组件.');
155 |
156 | layx.msg('Layx 新一代Web弹窗组件.',{dialogIcon:'success'});
160 |
161 | layx.msg('Layx 新一代Web弹窗组件.',{dialogIcon:'warn'});
165 |
166 | layx.msg('Layx 新一代Web弹窗组件.',{dialogIcon:'error'});
170 |
171 | layx.msg('Layx 新一代Web弹窗组件.',{dialogIcon:'help'});
175 |
176 | layx.alert('版本更新','Layx v'+layx.v+' 版本发布啦!');
181 |
182 | layx.alert('版本更新','Layx v'+layx.v+' 版本发布啦!',null,{dialogIcon:'success'});
186 |
187 | layx.alert('版本更新','Layx v'+layx.v+' 版本发布啦!',null,{dialogIcon:'warn'});
191 |
192 | layx.alert('版本更新','Layx v'+layx.v+' 版本发布啦!',null,{dialogIcon:'error'});
196 |
197 | layx.alert('版本更新','Layx v'+layx.v+' 版本发布啦!',null,{dialogIcon:'help'});
201 |
202 | layx.confirm('作何选择','你会在下一个系统使用 Layx 吗?',function(id){
207 | alert('您的支持是Layx发展的动力!');
208 | layx.destroy(id);
209 | });
210 |
211 | layx.confirm('作何选择','你会在下一个系统使用 Layx 吗?',function(id){
215 | alert('您的支持是Layx发展的动力!');
216 | layx.destroy(id);
217 | },{dialogIcon:'success'});
218 |
219 | layx.confirm('作何选择','你会在下一个系统使用 Layx 吗?',function(id){
223 | alert('您的支持是Layx发展的动力!');
224 | layx.destroy(id);
225 | },{dialogIcon:'warn'});
226 |
227 | layx.confirm('作何选择','你会在下一个系统使用 Layx 吗?',function(id){
231 | alert('您的支持是Layx发展的动力!');
232 | layx.destroy(id);
233 | },{dialogIcon:'error'});
234 |
235 | layx.confirm('作何选择','你会在下一个系统使用 Layx 吗?',function(id){
239 | alert('您的支持是Layx发展的动力!');
240 | layx.destroy(id);
241 | },{dialogIcon:'help'});
242 |
243 | layx.confirm('默认提示','Layx 会做为你下一个项目弹窗的首选吗?',null,{
247 | buttons:[
248 | {
249 | label:'确定',
250 | callback:function(id, button, event){
251 | alert("你点击了确定操作");
252 | layx.destroy(id);
253 | }
254 | },
255 | {
256 | label:'取消',
257 | callback:function(id, button, event){
258 | alert("你点击了取消操作");
259 | layx.destroy(id);
260 | }
261 | }
262 | ]
263 | });
264 |
265 | layx.confirm('监听操作','你关闭了窗口我都知道呢!',function(id,button){
269 | alert('你点击了确定');
270 | layx.destroy(id,{noTip:true}); // destroy可以设置参数,设置后可以在ondestroy.before中判断
271 | },{
272 | event:{
273 | ondestroy:{
274 | before:function(layxWindow,winform,params,inside,escKey){
275 | if(params.noTip===true){
276 | // 不需要提示
277 | }
278 | else{
279 | alert("我被关闭了");
280 | }
281 | }
282 | }
283 | }
284 | });
285 |
286 | layx.prompt('Layx 体验报告','写下您对 Layx 的建议:',function(id,value,textarea, button, event){
291 | alert(value);
292 | });
293 |
294 | layx.prompt('有默认值的输入框','你喜欢Layx吗?',function(id,value,textarea, button, event){
298 | alert(value);
299 | },'非常喜欢');
300 |
301 | layx.load('loadId','数据正在加载中,请稍后');
306 |
307 | // 5 秒后自动关闭
308 | setTimeout(function(){
309 | layx.destroy('loadId');
310 | },5000);
311 |
312 |
313 | layx.iframe('operator','带操作按钮窗口','./iframe.html',{
318 | statusBar:true,
319 | buttons:[
320 | {
321 | label:'保存',
322 | callback:function(id, button, event){
323 | // 获取 iframe 页面 window对象
324 | var contentWindow=layx.getFrameContext(id);
325 | alert(contentWindow.document.body.innerHTML);
326 |
327 | layx.destroy(id);
328 | }
329 | },
330 | {
331 | label:'取消',
332 | callback:function(id, button, event){
333 | layx.destroy(id);
334 | }
335 | }
336 | ]
337 | });
338 |
339 | layx.group('group',[
344 | {
345 | id:'group1',
346 | title:'文本窗口',
347 | content:'Layx 新一代Web弹窗组件.'
348 | },
349 | {
350 | id:'group2',
351 | title:'网页窗口',
352 | type:'url',
353 | url:'./iframe.html'
354 | },
355 | {
356 | id:'taobao',
357 | title:'百度官网',
358 | type:'url',
359 | url:'https://www.baidu.com'
360 | }
361 | ],1);
362 |
363 | layx.group('group-nomerge',[
367 | {
368 | id:'group1',
369 | title:'文本窗口',
370 | content:'Layx 新一代Web弹窗组件.'
371 | },
372 | {
373 | id:'group2',
374 | title:'网页窗口',
375 | type:'url',
376 | url:'./iframe.html'
377 | },
378 | {
379 | id:'taobao',
380 | title:'百度官网',
381 | type:'url',
382 | url:'https://www.baidu.com'
383 | }
384 | ],1,{
385 | mergeTitle:false,
386 | title:'我是不合并的标题'
387 | });
388 |
389 | layx.iframe('settimeout','打开一个倒计时关闭窗口','./iframe.html',{
394 | autodestroy:5000
395 | });
396 |
397 | layx.iframe('shadow','打开一个遮罩、阻隔窗口,点击窗口外试试','./iframe.html',{
402 | shadable:true
403 | });
404 |
405 | layx.iframe('shadow-color','设置阻隔背景透明度','./iframe.html',{
409 | shadable:0.8
410 | });
411 |
412 | layx.iframe('shadow-click','点击阻隔空白地方关闭窗口','./iframe.html',{
416 | shadable:0.8,
417 | control:false,
418 | border:false,
419 | shadow:false,
420 | shadeDestroy:true // 点击空白地方关闭
421 | });
422 |
423 | layx.iframe('sticktop','打开一个置顶窗口,再打开另外的窗口试试','./iframe.html',{
428 | alwaysOnTop:true,
429 | stickMenu:true, // 可选,是否显示切换置顶按钮
430 | position:[100,100]
431 | });
432 |
433 | layx.iframe('debugwin','打开一个带调试的窗口','./iframe.html',{
438 | debugMenu:true
439 | });
440 |
441 | layx.iframe('readonly','打开一个只读窗口','./iframe.html',{
446 | readonly:true
447 | });
448 |
449 | var btnTarget= document.getElementById('floatThat-bottom');
454 | var winform = layx.iframe('float-bottom','打开一个下边浮动窗口','./iframe.html',{
455 | floatTarget:btnTarget, // 被吸附的DOM对象
456 | width:357,
457 | height:200,
458 | alwaysOnTop:true,
459 | floatDirection: 'bottom', // 设置方向
460 | event:{
461 | ondestroy: {
462 | before: function (layxWindow, winform, params, inside,escKey) {
463 | if(inside===false){
464 | layx.visual(winform.id,false); // 隐藏窗口
465 | layx.updateFloatWinPosition(winform.id);
466 | return false;
467 | }
468 | }
469 | },
470 | onexist: function (layxWindow, winform) {
471 | layx.visual(winform.id,true); // 显示窗口
472 | }
473 | }
474 | });
475 |
476 |
477 | var btnTarget= document.getElementById('floatThat-top');
481 | var winform = layx.iframe('float-top','打开一个上边浮动窗口','./iframe.html',{
482 | floatTarget:btnTarget, // 被吸附的DOM对象
483 | width:357,
484 | height:200,
485 | alwaysOnTop:true,
486 | floatDirection: 'top', // 设置方向
487 | event:{
488 | ondestroy: {
489 | before: function (layxWindow, winform, params, inside,escKey) {
490 | if(inside===false){
491 | layx.visual(winform.id,false); // 隐藏窗口
492 | layx.updateFloatWinPosition(winform.id);
493 | return false;
494 | }
495 | }
496 | },
497 | onexist: function (layxWindow, winform) {
498 | layx.visual(winform.id,true); // 显示窗口
499 | }
500 | }
501 | });
502 |
503 |
504 | var btnTarget= document.getElementById('floatThat-right');
508 | var winform = layx.iframe('float-right','打开一个右边浮动窗口','./iframe.html',{
509 | floatTarget:btnTarget, // 被吸附的DOM对象
510 | width:357,
511 | height:200,
512 | alwaysOnTop:true,
513 | floatDirection: 'right', // 设置方向
514 | event:{
515 | ondestroy: {
516 | before: function (layxWindow, winform, params, inside,escKey) {
517 | if(inside===false){
518 | layx.visual(winform.id,false); // 隐藏窗口
519 | layx.updateFloatWinPosition(winform.id);
520 | return false;
521 | }
522 | }
523 | },
524 | onexist: function (layxWindow, winform) {
525 | layx.visual(winform.id,true); // 显示窗口
526 | }
527 | }
528 | });
529 |
530 |
531 | var btnTarget= document.getElementById('floatThat-left');
535 | var winform = layx.iframe('float-left','打开一个左边浮动窗口','./iframe.html',{
536 | floatTarget:btnTarget, // 被吸附的DOM对象
537 | width:357,
538 | height:200,
539 | alwaysOnTop:true,
540 | floatDirection: 'left', // 设置方向
541 | event:{
542 | ondestroy: {
543 | before: function (layxWindow, winform, params, inside,escKey) {
544 | if(inside===false){
545 | layx.visual(winform.id,false); // 隐藏窗口
546 | layx.updateFloatWinPosition(winform.id);
547 | return false;
548 | }
549 | }
550 | },
551 | onexist: function (layxWindow, winform) {
552 | layx.visual(winform.id,true); // 显示窗口
553 | }
554 | }
555 | });
556 |
557 |
558 | layx.updateFloatWinPosition('float-left','right');
562 | 重新打开上面的浮动窗口试试!
563 | 564 |layx.iframe('default-skin','皮肤:default','./iframe.html',{skin:'default'});
570 |
571 | layx.iframe('cloud-skin','皮肤:cloud','./iframe.html',{skin:'cloud'});
575 |
576 | layx.iframe('turquoise-skin','皮肤:turquoise','./iframe.html',{skin:'turquoise'});
580 |
581 | layx.iframe('river-skin','皮肤:river','./iframe.html',{skin:'river'});
585 |
586 | layx.iframe('asphalt-skin','皮肤:asphalt','./iframe.html',{skin:'asphalt'});
590 |
591 | /* 窗口 */
595 | .layx-window.layx-皮肤名称-river {
596 | }
597 | /* 标题栏 */
598 | .layx-window.layx-skin-皮肤名称 .layx-control-bar {
599 | }
600 | /* 内部按钮激活 */
601 | .layx-window.layx-skin-皮肤名称 .layx-inlay-menus .layx-icon:hover {
602 | }
603 | /* 底部工具栏按钮 */
604 | .layx-window.layx-skin-皮肤名称 .layx-button-item {
605 | }
606 | /* 底部工具栏按钮激活 */
607 | .layx-window.layx-skin-皮肤名称 .layx-button-item:hover {
608 | }
609 | layx.iframe('default-style','默认外观','./iframe.html');
614 |
615 | layx.iframe('gray-style','灰色背景','./iframe.html',{
619 | bgColor:'#ccc'
620 | });
621 |
622 | layx.iframe('opacity-style','透明窗口','./iframe.html',{
626 | opacity:0.5
627 | });
628 |
629 | layx.iframe('noborder-style','无边框','./iframe.html',{
633 | border:false
634 | });
635 |
636 | layx.iframe('noshadow-style','无阴影','./iframe.html',{
640 | shadow:false
641 | });
642 |
643 | layx.iframe('redborder-style','红色边框','./iframe.html',{
647 | border:'1px solid #f00'
648 | });
649 |
650 | layx.html('nocontrol-style','无标题栏','<button style="margin:10px;" onclick="layx.destroy(\'nocontrol-style\');">关闭</button>',{
654 | control:false
655 | });
656 |
657 | layx.iframe('statusbar-style','带状态栏','./iframe.html',{
661 | statusBar:'<div style="line-height:25px;padding:0 10px;" >我是状态栏内容</div>'
662 | });
663 |
664 | layx.iframe('radiu-style','自定义外观,比如圆角','./iframe.html',{
668 | style:layx.multiLine(function(){/*
669 |
670 | #layx-radiu-style{
671 | border-radius:4px;
672 | -webkit-border-radius:4px;
673 | -moz-border-radius:4px;
674 | -ms-border-radius:4px;
675 | }
676 |
677 | #layx-radiu-style .layx-window-icon{
678 | color:#f00;
679 | }
680 |
681 | */})
682 | });
683 | 在这里,可以尽情写 css 样式了,改成任何您想要的外观
684 | 685 |layx.iframe('purple-control-style','紫色标题栏','./iframe.html',{
690 | controlStyle:'background-color: #7719aa; color:#fff;',
691 | border:false,
692 | style:layx.multiLine(function(){/*
693 | #layx-purple-control-style .layx-inlay-menus .layx-icon:hover {
694 | background-color: #9953c0;
695 | }
696 |
697 | */})
698 | });
699 |
700 | layx.iframe('no-icon','没有窗口图标','./iframe.html',{
704 | icon:false
705 | });
706 |
707 | layx.iframe('custom-icon','自定义图标','./iframe.html',{
711 | icon:'<img src="logo.png" style="height:22px;display:block;" />'
712 | });
713 |
714 | layx.iframe('no-title',null,'./iframe.html',{
718 | icon:false
719 | });
720 |
721 | layx.iframe('stick-show','显示置顶按钮','./iframe.html',{
725 | stickMenu:true
726 | });
727 |
728 | layx.iframe('minhide','不显示最小化按钮','./iframe.html',{
732 | minMenu:false
733 | });
734 |
735 | layx.iframe('maxhide','不显示最大化按钮','./iframe.html',{
739 | maxMenu:false
740 | });
741 |
742 | layx.html('closehide','不显示关闭按钮','<button style="margin:10px;" onclick="layx.destroy(\'closehide\');">关闭</button>',{
746 | closeMenu:false
747 | });
748 |
749 | layx.iframe('onlyclose','只显示关闭按钮','./iframe.html',{
753 | minMenu:false,
754 | maxMenu:false
755 | });
756 |
757 | layx.iframe('leftbar','自定义标题栏左边区域','./iframe.html',{
761 | icon:'<button>按钮一</button> <img src="logo.png" style="height:22px;vertical-align: middle;" /> <button>按钮二</button>'
762 | });
763 |
764 | layx.iframe('autotitle',null,'./iframe.html',{
768 | useFrameTitle:true
769 | });
770 |
771 | layx.html('custom-button-style','自定义按钮style样式','设置按钮字体大小和颜色',{
776 | width:300,
777 | height:300,
778 | statusBar:true,
779 | buttons:[
780 | {
781 | label:'确定',
782 | callback:function(id,button, event){
783 | layx.destroy(id);
784 | },
785 | style:'color:#f00;font-size:16px;'
786 | }
787 | ]
788 | });
789 |
790 | layx.html('custom-button-classes','添加class样式','为按钮添加custom-button 类',{
794 | width:300,
795 | height:300,
796 | statusBar:true,
797 | buttons:[
798 | {
799 | label:'确定',
800 | callback:function(id,button, event){
801 | layx.destroy(id);
802 | },
803 | classes:'custom-button'
804 | }
805 | ]
806 | });
807 |
808 | layx.iframe('defaultmove','鼠标拖动标题栏看看','./iframe.html');
814 |
815 | layx.iframe('onlyvertical','只允许垂直拖动','./iframe.html',{
819 | moveLimit:{
820 | horizontal:true
821 | }
822 | });
823 |
824 | layx.iframe('onlyhorizontal','只允许水平拖动','./iframe.html',{
828 | moveLimit:{
829 | vertical:true
830 | }
831 | });
832 |
833 | layx.iframe('noallowout','不允许拖出可视窗口','./iframe.html',{
837 | moveLimit:{
838 | leftOut: false,
839 | rightOut: false,
840 | topOut: false,
841 | bottomOut: false,
842 | }
843 | });
844 |
845 | layx.iframe('nomove','不允许拖动','./iframe.html',{
849 | movable:false
850 | });
851 |
852 | layx.iframe('nomovebottom','四个方向限制,比如不允许拖出底部','./iframe.html',{
856 | moveLimit:{
857 | leftOut: true,
858 | rightOut: true,
859 | topOut: true,
860 | bottomOut: false,
861 | }
862 | });
863 |
864 | layx.iframe('defaultresize','默认可以8个方向拖曳改变大小','./iframe.html');
869 |
870 | layx.iframe('notopbottomresize','8个方向拖曳大小控制,比如不允许顶部和底部拖曳改变','./iframe.html',{
874 | resizeLimit: {
875 | t: true,
876 | r: false,
877 | b: true,
878 | l: false,
879 | lt: false,
880 | rt: false,
881 | lb: false,
882 | rb: false
883 | }
884 | });
885 |
886 | layx.iframe('noresize','不允许改变大小','./iframe.html',{
890 | resizable:false
891 | });
892 |
893 | layx.iframe('defaultsize','默认大小(宽800px,高600px)','./iframe.html');
899 |
900 | layx.iframe('customsize','自定义宽度、高度(宽300px,高300px)','./iframe.html',{
904 | width:300,
905 | height:300
906 | });
907 |
908 | layx.iframe('minwidthheight','拖曳调整浏览器窗口大小试试,最小300px x 300px','./iframe.html',{
912 | minWidth:300,
913 | minHeight:300
914 | });
915 |
916 | layx.iframe('resize-ct','中间打开','./iframe.html');
921 |
922 | layx.iframe('resize-lt','左上角打开','./iframe.html',{
926 | position:'lt'
927 | });
928 |
929 | layx.iframe('resize-rt','右上角打开','./iframe.html',{
933 | position:'rt'
934 | });
935 |
936 | layx.iframe('resize-lb','左下角打开','./iframe.html',{
940 | position:'lb'
941 | });
942 |
943 | layx.iframe('resize-rb','右下角打开','./iframe.html',{
947 | position:'rb'
948 | });
949 |
950 | layx.iframe('resize-tc','上边中间打开','./iframe.html',{
954 | position:'tc'
955 | });
956 |
957 | layx.iframe('resize-lc','左边中间打开','./iframe.html',{
961 | position:'lc'
962 | });
963 |
964 | layx.iframe('resize-rc','右边中间打开','./iframe.html',{
968 | position:'rc'
969 | });
970 |
971 | layx.iframe('resize-bc','下边中间打开','./iframe.html',{
975 | position:'bc'
976 | });
977 |
978 | layx.iframe('resize-custom','自定义位置(上边100px,左边200px)','./iframe.html',{
982 | position:[100,200]
983 | });
984 |
985 | layx.iframe('resize-custom','自定义位置(组合模式,顶部中间并距离20px)','./iframe.html',{
989 | position:[20,'tc']
990 | });
991 |
992 | layx.iframe('store-area','拖动或者调整窗口大小并刷新页面看看!','./iframe.html',{
996 | storeStatus:true
997 | });
998 |
999 | layx.iframe('event-onload','加载前后控制','./iframe.html',{
1005 | event:{
1006 | onload:{
1007 | before:function(layxWindow,winform){
1008 | alert("加载之前");
1009 | console.log(new Date()+"加载之前~")
1010 | console.log(winform);
1011 | console.log("=============分割线===============");
1012 | },
1013 | after: function (layxWindow, winform) {
1014 | alert("加载之后");
1015 | console.log(new Date()+"加载之后~")
1016 | console.log(winform);
1017 | console.log("=============分割线===============");
1018 | }
1019 | }
1020 | }
1021 | });
1022 | 请打开控制台查看
1023 | 1024 |layx.iframe('event-onmin','最小化前后控制','./iframe.html',{
1029 | event:{
1030 | onmin:{
1031 | before:function(layxWindow,winform){
1032 | alert("最小化之前");
1033 | console.log(new Date()+"最小化之前~")
1034 | console.log(winform);
1035 | console.log("=============分割线===============");
1036 | },
1037 | after: function (layxWindow, winform) {
1038 | alert("最小化之后");
1039 | console.log(new Date()+"最小化之后~")
1040 | console.log(winform);
1041 | console.log("=============分割线===============");
1042 | }
1043 | }
1044 | }
1045 | });
1046 | 请打开控制台查看
1047 | 1048 |layx.iframe('event-onmax','最大化前后控制','./iframe.html',{
1053 | event:{
1054 | onmax:{
1055 | before:function(layxWindow,winform){
1056 | alert("最大化之前");
1057 | console.log(new Date()+"最大化之前~")
1058 | console.log(winform);
1059 | console.log("=============分割线===============");
1060 | },
1061 | after: function (layxWindow, winform) {
1062 | alert("最大化之后");
1063 | console.log(new Date()+"最大化之后~")
1064 | console.log(winform);
1065 | console.log("=============分割线===============");
1066 | }
1067 | }
1068 | }
1069 | });
1070 | 请打开控制台查看
1071 | 1072 |layx.iframe('event-onrestore','恢复前后控制','./iframe.html',{
1077 | event:{
1078 | onrestore:{
1079 | before:function(layxWindow,winform){
1080 | alert("恢复之前");
1081 | console.log(new Date()+"恢复之前~")
1082 | console.log(winform);
1083 | console.log("=============分割线===============");
1084 | },
1085 | after: function (layxWindow, winform) {
1086 | alert("恢复之后");
1087 | console.log(new Date()+"恢复之后~")
1088 | console.log(winform);
1089 | console.log("=============分割线===============");
1090 | }
1091 | }
1092 | }
1093 | });
1094 | 请打开控制台查看
1095 | 1096 |layx.iframe('event-ondestroy','关闭前后控制','./iframe.html',{
1101 | event:{
1102 | ondestroy:{
1103 | before:function(layxWindow,winform,inside,escKey){
1104 | alert("关闭之前");
1105 | console.log(new Date()+"关闭之前~")
1106 | console.log(winform);
1107 | console.log("=============分割线===============");
1108 | },
1109 | after: function () {
1110 | alert("关闭之后");
1111 | console.log(new Date()+"关闭之后~")
1112 | console.log("=============分割线===============");
1113 | }
1114 | }
1115 | }
1116 | });
1117 | 请打开控制台查看
1118 | 1119 |layx.iframe('event-onvisual','显示/隐藏前后控制','./iframe.html',{
1124 | event:{
1125 | ondestroy: {
1126 | before: function (layxWindow, winform, params, inside,escKey) {
1127 | if(params.ok===true){
1128 | // 彻底销毁
1129 | }
1130 | else{
1131 | layx.visual(winform.id,false); // 隐藏窗口
1132 | return false;
1133 | }
1134 | }
1135 | },
1136 | onexist: function (layxWindow, winform) {
1137 | layx.visual(winform.id,true); // 显示窗口
1138 | },
1139 | onvisual:{
1140 | before:function(layxWindow, winform, params, inside, status){
1141 | if(status===true){
1142 | alert("显示之前");
1143 | console.log(new Date()+"显示之前~");
1144 | }
1145 | else{
1146 | alert("隐藏之前");
1147 | console.log(new Date()+"隐藏之前~");
1148 | }
1149 | console.log(winform);
1150 | console.log("=============分割线===============");
1151 | },
1152 | after: function (layxWindow, winform,status) {
1153 | if(status===true){
1154 | alert("显示之后");
1155 | console.log(new Date()+"显示之后~");
1156 | }
1157 | else{
1158 | alert("隐藏之后");
1159 | console.log(new Date()+"隐藏之后~");
1160 | }
1161 | console.log(winform);
1162 | console.log("=============分割线===============");
1163 | }
1164 | }
1165 | }
1166 | });
1167 | 请打开控制台查看
1168 | 1169 | 1170 |layx.iframe('event-onmove','拖动前中后控制','./iframe.html',{
1175 | event:{
1176 | onmove:{
1177 | before:function(layxWindow,winform){
1178 | console.log(new Date()+"拖动之前~")
1179 | console.log(winform);
1180 | console.log("=============分割线===============");
1181 | },
1182 | progress:function(layxWindow,winform){
1183 | console.log(new Date()+"拖动之中~")
1184 | console.log(winform);
1185 | console.log("=============分割线===============");
1186 | },
1187 | after: function (layxWindow, winform) {
1188 | console.log(new Date()+"拖动之后~")
1189 | console.log(winform);
1190 | console.log("=============分割线===============");
1191 | }
1192 | }
1193 | }
1194 | });
1195 | 请打开控制台查看
1196 | 1197 |layx.iframe('event-onresize','拖曳大小前中后控制','./iframe.html',{
1202 | event:{
1203 | onresize:{
1204 | before:function(layxWindow,winform){
1205 | console.log(new Date()+"拖曳大小之前~")
1206 | console.log(winform);
1207 | console.log("=============分割线===============");
1208 | },
1209 | progress:function(layxWindow,winform){
1210 | console.log(new Date()+"拖动大小之中~")
1211 | console.log(winform);
1212 | console.log("=============分割线===============");
1213 | },
1214 | after: function (layxWindow, winform) {
1215 | console.log(new Date()+"拖曳大小之后~")
1216 | console.log(winform);
1217 | console.log("=============分割线===============");
1218 | }
1219 | }
1220 | }
1221 | });
1222 | 请打开控制台查看
1223 | 1224 |layx.iframe('event-onfocus','点击窗口看看','./iframe.html',{
1229 | event:{
1230 | onfocus:function(layxWindow,winform){
1231 | alert("我获取焦点啦,我的窗口Id是:"+winform.id);
1232 | }
1233 | }
1234 | });
1235 |
1236 | layx.iframe('event-onexist','再点击创建相同的窗口看看','./iframe.html',{
1241 | event:{
1242 | onexist:function(layxWindow,winform){
1243 | alert("我已经打开啦");
1244 | }
1245 | }
1246 | });
1247 |
1248 | layx.group('group-switch',[
1253 | {
1254 | id:'group1',
1255 | title:'文本窗口',
1256 | content:'Layx 新一代Web弹窗组件.'
1257 | },
1258 | {
1259 | id:'group2',
1260 | title:'网页窗口',
1261 | type:'url',
1262 | url:'./iframe.html'
1263 | },
1264 | {
1265 | id:'taobao',
1266 | title:'百度官网',
1267 | type:'url',
1268 | url:'https://www.baidu.com'
1269 | }
1270 | ],1,{
1271 | event:{
1272 | onswitch: {
1273 | before: function (layxWindow, winform, frameId) {
1274 | alert("切换之前");
1275 | },
1276 | after: function (layxWindow, winform, frameId) {
1277 | alert("切换之后");
1278 | }
1279 | }
1280 | }
1281 | });
1282 |
1283 | layx.iframe('stick-event','打开一个置顶窗口,再打开另外的窗口试试','./iframe.html',{
1288 | alwaysOnTop:true,
1289 | stickMenu:true,
1290 | event:{
1291 | onstick: {
1292 | before: function (layxWindow, winform, frameId) {
1293 | alert("置顶之前");
1294 | },
1295 | after: function (layxWindow, winform, frameId) {
1296 | alert("置顶之后");
1297 | }
1298 | }
1299 | }
1300 | });
1301 |
1302 | layx.iframe('maxauto','自动最大化窗口','./iframe.html',{
1308 | event:{
1309 | onload:{
1310 | after:function(layxWindow,winform){
1311 | layx.max(winform.id);
1312 | }
1313 | }
1314 | }
1315 | });
1316 |
1317 | layx.prompt('请输入当前框架的名称','请输入Layx名字:',function(id,value,textarea, button, event){
1321 | layx.destroy(id);
1322 | },'Layx',{
1323 | event:{
1324 | ondestroy: {
1325 | before: function (layxWindow, winform, params, inside,escKey) {
1326 | var textarea=layx.getPromptTextArea(winform.id);
1327 | if(textarea.value==="Layx"){
1328 | alert("你正确输入了 Layx");
1329 | }
1330 | else{
1331 | alert("您输入的是:"+textarea.value+",您必须输入 Layx 才能关闭 ");
1332 | return false;
1333 | }
1334 | }
1335 | }
1336 | }
1337 | });
1338 |
1339 | layx.iframe('loadtext','定制加载提示文本','https://www.baidu.com',{
1344 | loadingText: '正在加载百度官网官方网站,请稍后哦'
1345 | });
1346 |
1347 | layx.iframe('destroysettimeout','定制倒计时文本','./iframe.html',{
1351 | autodestroy:5000,
1352 | autodestroyText: '<div style="padding: 0 8px; ">亲~,此窗口将在 <strong>{second}</strong> 秒内自动关闭哦.</div>'
1353 | });
1354 |
1355 | layx.confirm('温馨提示','你还为保存文本内容,请选择操作。',null,{
1359 | buttons:[
1360 | {
1361 | label:'保存文本',
1362 | callback:function(id, button, event){
1363 | alert("你点击了保存文本");
1364 | }
1365 | },
1366 | {
1367 | label:'确定',
1368 | callback:function(id, button, event){
1369 | alert("你点击了确定");
1370 | }
1371 | },
1372 | {
1373 | label:'关闭',
1374 | callback:function(id, button, event){
1375 | alert("你点击了关闭");
1376 | layx.destroy(id);
1377 | }
1378 | }
1379 | ]
1380 | });
1381 |
1382 | alert(layx.v);1388 | 1389 |
layx.open({
1393 | id:'common',
1394 | title:'通用打开窗口方法',
1395 | content:'<div style="padding:10px;">Layx 所有的窗口类型全部都是基于此操作方法创建的。</div>'
1396 | });
1397 |
1398 | var windows=layx.windows(); 1402 | 1403 | var jsonStr=JSON.stringify(windows, null, 4); 1404 | console.log(jsonStr); 1405 | alert(jsonStr); 1406 |1407 |
请打开控制台查看
1408 | 1409 |// 第一种方法,直接接收返回值
1413 | var winform = layx.iframe('single','测试操作方法、通讯窗口','./iframe.html');
1414 | alert(JSON.stringify(winform, null, 4));
1415 |
1416 | // 第二种方法,通过 layx.getWindow(id) 获取窗口的winform对象
1417 | var winform2 = layx.getWindow('single');
1418 | alert(JSON.stringify(winform2, null, 4));
1419 |
1420 | 请打开控制台查看
1421 | 1422 |第一步:先打开窗口才能测试
1426 | 1427 |第二步:设置窗口标题
1428 |layx.setTitle('iframe-demo','我是新的标题');
1429 |
1430 | 第一步:先打开窗口才能测试
1434 | 1435 |第二步:设置窗口标题(自动获取页面标题)
1436 |layx.setTitle('iframe-demo',null,true);
1437 |
1438 | 第一步:先打开窗口才能测试
1442 | 1443 |第二步:设置文本窗口内容
1444 |layx.setContent('text-demo',new Date()+' 我是新设置的内容 ');
1445 |
1446 | 第一步:先打开窗口才能测试
1450 | 1451 |第二步:设置文本窗口内容、取用模式
1452 |layx.setContent('text-demo',document.getElementById('dom-get'),false);
1453 |
1454 | 第一步:先打开窗口才能测试
1458 | 1459 |第二步:设置网页窗口地址为 https://www.baidu.com/
1460 |layx.setUrl('iframe-demo','https://www.baidu.com/');
1461 |
1462 | 第一步:先打开窗口才能测试
1466 | 1467 |第二步:设置网页窗口地址为 ./child.html
1468 |layx.setUrl('iframe-demo1','./child.html');
1469 | 测试窗口必须设置 useFrameTitle:true
1470 | 1471 |layx.flicker('layx');
1475 |
1476 | layx.max('layx');
1480 |
1481 | layx.restore('layx');
1485 |
1486 | 第一步:先打开窗口才能测试
1490 | 1491 |第二步:设置最小化
1492 |layx.min('iframe-demo');
1493 |
1494 | layx.stickToggle('layx');
1498 | 注意看 Layx 演示案例 右上角置顶图标颜色变化
1499 | 1500 |layx.setPosition('layx','ct');
1504 |
1505 | layx.setSize('layx',{width:300,height:300});
1509 |
1510 | 第一步:先打开窗口才能测试
1514 | 1515 |第二步:关闭窗口
1516 |layx.destroy('iframe-demo');
1517 |
1518 | 第一步:先打开窗口才能测试
1522 | 1523 |第二步:重载页面窗口
1524 |layx.reloadFrame('iframe-demo');
1525 |
1526 | 第一步:先打开窗口才能测试
1530 | 1531 |第二步:关闭所有窗口
1532 |layx.destroyAll();1533 |
注意看 设置 closable:false 窗口不可关闭
1534 | 1535 |layx.setGroupTitle('layx','demo','演示示例');
1539 | 注意看 当前文档的标题哦
1540 | 1541 |第一步:先打开窗口组才能测试
1545 | 1546 |第二步:设置窗口组一内容
1547 |layx.setGroupContent('group-demo','group1','我是新设置的内容');
1548 |
1549 | 第一步:先打开窗口组才能测试
1553 | 1554 |第二步:设置窗口组一内容、取用模式
1555 |layx.setGroupContent('group-demo','group1',document.getElementById('dom-get'),false);
1556 |
1557 | 第一步:先打开窗口组才能测试
1561 | 1562 |第二步:设置窗口组二URL地址
1563 |layx.setGroupUrl('group-demo','group2','https://www.baidu.com');
1564 |
1565 | 第一步:先打开窗口组才能测试
1569 | 1570 |第二步:设置窗口组二URL地址
1571 |layx.setGroupUrl('group-demo2','group2','./child.html');
1572 | 窗口组二必须设置 useFrameTitle:true
1573 | 1574 |layx.setGroupIndex('layx','info');
1578 |
1579 | 第一步:先打开窗口组才能测试
1583 | 1584 |第二步:重载窗口组页面窗口
1585 |layx.reloadGroupFrame('group-demo','group2');
1586 |
1587 | layx.iframe('topiframe','在topopen.html内部打开调用 top.layx 打开新窗口','./topopen.html');
1592 |
1593 | 第一步:先打开窗口才能测试
1597 | 1598 |第二步:获取页面HTML
1599 |var win = layx.getFrameContext('iframe-demo');
1600 | alert(win.document.body.innerHTML);
1601 |
1602 | 第一步:先打开窗口才能测试
1606 | 1607 |第二步:设置页面HTML
1608 |var win = layx.getFrameContext('iframe-demo');
1609 | win.document.body.innerHTML='<label>Hello Layx!</label>';
1610 |
1611 | 第一步:先打开窗口才能测试
1615 | 1616 |第二步:调用页面定义方法 iframeFunc
1617 |var win = layx.getFrameContext('iframe-demo');
1618 | win.iframeFunc();
1619 |
1620 | 第一步:先打开窗口组才能测试
1624 | 1625 |第二步:获取窗口组二HTML
1626 |var win = layx.getGroupFrameContext('group-demo','group2');
1627 | alert(win.document.body.innerHTML);
1628 |
1629 | 第一步:先打开窗口组才能测试
1633 | 1634 |第二步:设置窗口组二HTML
1635 |var win = layx.getGroupFrameContext('group-demo','group2');
1636 | win.document.querySelector("label").innerHTML="Hello Layx!";
1637 |
1638 | 第一步:先打开窗口组才能测试
1642 | 1643 |第二步:调用页面定义方法 iframeFunc
1644 |var win = layx.getGroupFrameContext('group-demo','group2');
1645 | win.iframeFunc();
1646 |
1647 |