Layui layer.photos相册层可通过success回调获取img元素并设置transform: scaleX(-1)或scaleY(-1)实现水平/垂直翻转,需配合data-flipped标记、按钮绑定、transform重置及容器居中适配,避免缩放偏移与溢出。

给Layui layer.photos相册层添加水平翻转功能
要在Layui的layer.photos相册层中实现单张图片的左右翻转(镜像),必须在success回调中操作当前显示的img元素,直接修改其CSS transform属性,不能改动src或替换DOM节点。
第一步:调用layer.photos时启用success回调,确保能拿到渲染完成后的预览层DOM
第二步:在success回调内定位到当前显示的图片元素,使用layero.find('.layui-layer-phimg img').get(0)获取原生img对象——【注意:必须用get(0),不能用[0]或.eq(0),否则后续style赋值无效】
第三步:为该img元素添加一个data-flipped属性用于状态标记,并绑定翻转按钮点击事件;按钮可插入到预览层右上角:$(layero).find('.layui-layer-btn').before('
第四步:点击按钮时切换transform: scaleX(-1),同时清除rotate、scale等其他transform影响,只保留翻转效果:img.style.transform = flipped ? 'scaleX(1)' : 'scaleX(-1)'; flipped = !flipped
给Layui layer.photos相册层添加垂直翻转功能
垂直翻转即上下镜像,原理与水平翻转一致,但操作的是scaleY而非scaleX。关键在于避免与已有旋转、缩放逻辑冲突。
方法一:复用同一按钮,长按触发垂直翻转
监听mousedown事件后延时300ms判断是否为长按,是则执行img.style.transform = 'scaleY(-1)',松开时恢复;需同步清除scaleX和rotate值,否则叠加失效。
方法二:新增独立按钮,插入位置与水平翻转按钮并排,样式微调为↑↓图标
点击时先重置所有transform:img.style.transform = '',再单独设置img.style.transform = 'scaleY(-1)'——【这一步不可省略,否则旧transform残留会导致翻转中心偏移或图像裁剪】
翻转后保持图片居中且不溢出容器
仅加scaleX/Y会导致图片宽高比例失衡,视觉上“撑出”预览框。必须同步修正容器尺寸与定位。
翻转瞬间立即执行:
const phimg = layero.find('.layui-layer-phimg');
const img = phimg.find('img').get(0);
phimg.css({ width: img.naturalWidth, height: img.naturalHeight });
phimg.parent().css({ left: '50%', top: '50%', transform: 'translate(-50%, -50%)' });
这一步要放在每次翻转赋值style.transform之后,否则新transform会覆盖translate定位。
如果图片原始尺寸过大,还需限制max-width/max-height:img.style.maxWidth = '100%'; img.style.maxHeight = '80vh';


















