必须设 maxmin: true(仅对 type: 1/2 有效),否则右上角按钮不显示;双击标题栏需手动绑定事件并用 layero.find;自动最大化须在 success 回调中延时调用 layer.max(index);area 避免百分比,高度勿设 'auto';调用 max/restore 后须同步更新 layero.data('ismax')。

必须设 maxmin: true,且只对 type: 1 和 type: 2 有效;其他 type(如 0、3、4)加了也白搭。
maxmin: true 是唯一开关,不是“默认开启”
很多人以为只要调用 layer.max() 就能触发最大化 UI,结果按钮不出现、双击没反应——根本原因是漏写了 maxmin: true。这个配置项只控制右上角两个按钮的显隐,不参与行为逻辑,但它是所有交互的入口前提。
- 只对
type: 1(内嵌 HTML/DOM)和type: 2(iframe 层)生效;type: 0(信息框)、type: 3(加载层)、type: 4(tips)设了也完全不渲染按钮 - 不要写成
maxMin: true或maxmin: "true",大小写和类型必须严格匹配布尔值 - 热更新后按钮突然消失?大概率是浏览器缓存了旧版
layer.css,强制刷新(Ctrl+F5)即可
双击标题栏要自己绑事件,layer 不自动处理
Layer 默认对标题栏 .layui-layer-title 完全不监听 dblclick,这不是 bug,是设计如此。想实现双击切换,必须在 success 回调里手动绑定,并确保作用域隔离。
- 用
layero.find('.layui-layer-title'),别用$('.layui-layer-title'),否则可能误操作其他已打开弹窗 - 每次 open 都要先
.off('dblclick')再.on('dblclick'),否则重复打开会叠加事件,一次双击触发多次layer.max() - 判断状态必须用
layero.hasClass('layui-layer-max'),不能靠变量或 flag,因为 class 是 layui 内部真实维护的状态标识 - 调用时务必传入
index(success的第二个参数),传错或传undefined会静默失败
自动最大化必须延时,不能直接 setTimeout(layer.max, 1000)
想“打开后 1 秒自动撑满”,不能把 layer.max() 写在 layer.open() 外部的 setTimeout 里——此时 DOM 还没挂载,layer 实例也未注册,必然报 Cannot read property 'max' of undefined。
- 唯一可靠时机是
success回调,里面layero和index都已就绪 - 延时推荐 50–100ms:太短(300ms)用户会明显看到“先弹出、再撑满”的跳变
- 如果 content 是远程 URL 或含 iframe,建议延时 200ms,并在
success中监听iframe.onload后再调layer.max(index) - 别用
layer.index替代index参数,它会被后续layer.msg()等覆盖,不可靠
area 用百分比会导致还原错位,这是已知缺陷
如果你设了 area: ['90%', '80%'],点击最小化再点还原,弹窗大概率尺寸错乱——这不是你代码写错了,是 layui ≤2.8.x 的固有缺陷:它把百分比值当像素存进状态,还原时直接套用,导致计算失真。
- 解决办法:改用固定像素,例如
area: ['1200px', '700px'],兼容性好、行为可预期 - 若必须响应式,可用 JS 动态算宽高:
area: [$(window).width() * 0.9 + 'px', $(window).height() * 0.8 + 'px'],并在window.resize时手动调layer.style(index) - 高度别设
'auto':配合maxmin: true时,最小化→最大化会把.layui-layer-content高度设为0px,内容直接消失;稳妥做法是给个最小高度约束,比如area: ['800px', '500px'],再用 CSS 控制max-height和overflow-y
最易被忽略的是:手动调用 layer.max() 或 layer.restore() 后,必须同步更新 layero.data('isMax', true/false),否则后续点击右上角自带按钮会行为错乱——比如点“最大化”实际执行了还原。这步不是可选,是必须补上的状态对齐。











