需用data-photos属性定义图集容器并确保JSON含title/id/start/data四字段,data中每项必有src和alt;点击事件必须绑定到图片并传外层容器给layer.photos的elem参数,否则弹窗空白。

在Layui项目中实现图片点击后以画廊形式全屏放大预览,需调用layer.photos方法并正确组织图片数据结构,否则弹窗无法识别图片列表或直接报错。
准备符合要求的图片容器结构
在页面中添加一个带data-photos属性的
这一步不能用class或id选择器代替data-photos属性——layer.photos只认这个属性名,写成data-photo或data-images会完全失效。
示例HTML:<div data-photos='{"title":"用户上传图集","id":100,"start":0,"data":[{"src":"/img/a.jpg","alt":"第一张"},{"src":"/img/b.jpg","alt":"第二张"}]} '></div>
为图片绑定点击事件并触发layer.photos
给容器内每张图片(如标签)绑定click事件,事件处理函数中调用layer.photos(),传入配置对象。
配置对象至少要包含elem(指向data-photos所在容器的DOM节点或选择器)和shade(遮罩透明度,建议设为0.8避免背景刺眼)。
注意:elem不能传图片本身,必须传外层那个带data-photos属性的容器——【传错节点会导致弹窗空白无图】。
自定义图片点击行为(方法一:原生JS绑定)
获取所有图片元素,遍历绑定onclick:
document.querySelectorAll('.gallery-img').forEach(img => { img.onclick = function() { layer.photos({ elem: this.closest('[data-photos]'), shade: 0.8 }); }; });
这一步操作起来很简单,直接把事件挂到每个img上就行,但要注意this.closest('[data-photos]')必须能向上找到带data-photos的父容器,否则会找不到图集数据。
自定义图片点击行为(方法二:Layui内置事件委托)
第一步:确保已加载lay模块并执行layui.use(['layer', 'jquery'], function(exports) { ... });
第二步:使用layui.jquery的on方法绑定事件委托,避免重复绑定:
layui.jquery(document).on('click', '.gallery-img', function() { layer.photos({ elem: this.closest('[data-photos]'), shade: 0.8 }); });
第三步:关闭默认右键菜单干扰(可选),在layer.photos调用前加一句event.preventDefault(),防止移动端长按触发系统菜单覆盖画廊。


















