layui无内置文本域全屏编辑功能,需手动用css撑满视口并控制焦点与尺寸;layedit.height仅支持固定像素值,不响应全屏变化;原生textarea方案更可控,关键步骤包括动态插入fixed定位textarea、禁用resize、聚焦全选及esc退出监听。

layui 本身没有内置「文本域全屏编辑」功能,layedit 富文本编辑器也不提供原生全屏按钮;所谓“全屏”,实际是靠 CSS 强制撑满视口 + 手动接管焦点与尺寸控制实现的,不是调个 API 就完事。
为什么 layedit.build() 的 height 配置对全屏无效
layedit.build() 的 height 参数只控制初始高度,且仅接受数字(如 400),不支持 "100vh" 或 "full-0" 这类 layui 表格用的自适应写法。一旦设为固定像素,就无法响应浏览器全屏状态变化——哪怕你把容器 div 拉满屏幕,编辑器内部 iframe 或内容区域仍卡在原高度。
- 直接写
height: '100vh'会被 layedit 忽略,回退到默认 200px - 试图用
style="height: 100vh"覆盖 textarea 容器,但 layedit 内部会重写样式,大概率失效 - 全屏后编辑器滚动条错位、工具栏被截断,是因为 layedit 初始化时未监听
resize或fullscreenchange
手动实现 textarea 全屏编辑的三步关键动作
绕过 layedit,直接用原生 textarea + CSS 控制,更可控。核心是:占满视口、禁用缩放、聚焦即全屏、ESC 退出。
- 点击按钮时,用
document.body.appendChild(fullscreenTextarea)动态插入一个绝对定位的textarea,并设style="position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:9999;resize:none;padding:16px;font-size:16px;" - 必须加
resize:none,否则拖拽右下角会破坏全屏布局 - 插入后立即
fullscreenTextarea.focus(),并用select()全选已有内容(如有) - 监听
keydown:按Escape键时removeChild并恢复原字段焦点 - 别忘了给
textarea加tabindex="0",否则键盘焦点不可达
如果非要用 layedit,怎么模拟全屏体验
只能妥协:不真全屏,而是让 layedit 容器尽可能大,并监听窗口变化动态重设高度。这比原生 textarea 多两层封装,容易出问题。
- 初始化时,把 layedit 绑定到一个
div而非textarea,该div的父容器需设position:relative - 全屏按钮触发后,给这个父容器加 class:
fullscreen-mode,CSS 中定义:.fullscreen-mode { position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:9998; } - 然后调
layedit.setContent(index, currentContent)确保内容同步,再手动计算并设置layui.$('.layedit-iframe').height('calc(100vh - 80px)')(减去工具栏高度) - 必须监听
window.addEventListener('resize', () => { ... }),每次 resize 后重新 setHeight,否则横竖屏切换或分屏时内容溢出 - 退出时不仅要移除 class,还得调
layui.$('.layedit-iframe').css('height', '')清除内联样式,否则下次打开高度异常
真正难的不是铺满屏幕,而是全屏状态下保持编辑光标位置、撤销栈连续、图片上传路径正确、以及 ESC 退出后焦点精准落回原单元格——这些细节没被封装进任何现成模块,得一行行补。











