必须通过layer.open配置的full和restore回调捕获最大化/还原时机,仅type为1或2、maxmin:true且area用固定像素时生效;iframe层需在回调中调用layer.iframeauto(index)同步尺寸。

要在Layui弹出层中准确捕获用户点击最大化按钮或还原按钮的时机,必须依赖框架内置的回调机制而非DOM事件监听,因为只有full和restore这两个回调能真实反映用户通过UI触发的状态切换。
确认弹窗类型和配置是否支持回调
确保layer.open中type值为1(页面层)或2(iframe层),其他类型如0、3、4不支持最大化功能,设了full/restore也完全不会执行。
必须显式设置maxmin: true,否则右上角按钮不显示,回调自然无从触发。
【area不能用百分比】若area写成['90%', '80%']或['auto', '600px'],restore执行后弹窗尺寸会严重错位,连带导致下一次full回调内获取的layero尺寸失真——这是layui 2.8.x至今未修复的硬伤。
正确注册full和restore回调函数
在layer.open配置对象中直接传入full和restore字段,二者签名统一为function(layero, index),其中layero是当前弹层DOM元素,index是该弹层唯一ID。
不要拼错字段名:写成onFull、fullCallback、onmaximize等均无效;也不要在函数内尝试传第三个参数,layui不会提供事件对象。
示例代码片段:
layer.open({
type: 1,
content: '
maxmin: true,
area: ['1200px', '700px'],
full: function(layero, index) {
console.log('已进入全屏,DOM:', layero);
},
restore: function(layero, index) {
console.log('已还原,DOM:', layero);
}
});
区分手动调用与用户点击触发
full和restore回调只在两种情况下触发:一是用户点击右上角最大化/还原按钮,二是代码中显式调用layer.full(index)或layer.restore(index)。
它们不是“监听器”,不会响应layer.max()、layer.min()或双击标题栏等非标准操作——那些行为需另行绑定事件并手动调用对应API。
如果你发现restore没执行,先检查是否误把type设成了0;再确认success回调里有没有提前用.remove()删掉.layui-layer-max按钮,导致按钮不可点。
处理iframe子页尺寸同步
第一步:在full回调中,先判断是否为iframe层——if (layero.find('iframe').length) { ... }。
第二步:调用layer.iframeAuto(index),强制重算iframe高度,但注意此操作必须在iframe加载完成之后,否则取到的高度是0。
第三步:为防跨域失败,用try-catch包裹layer.iframeAuto(index),降级方案是手动设置layero.find('iframe').height('95vh')。
这一步不做,full后iframe内容会被截断或底部留白,用户看到的是错位界面,而非预期的撑满效果。











