- 使用现成的成熟插件(推荐,最简单)
- 手动 DIY 实现(最灵活,可定制化)
使用现成的成熟插件(推荐)
对于大多数用户来说,直接使用由社区开发者制作好的插件是最高效、最安全的选择,这些插件通常已经处理好了兼容性和各种细节。

推荐插件:layer 弹出层插件
layer 是一款被广泛使用的 Web 弹出层组件,功能强大,风格美观,且对 DedeCMS 有很好的兼容性。
操作步骤:
第 1 步:下载并上传插件文件
- 下载:访问
layer的官方网站或 GitHub 仓库下载最新版,通常你会得到一个包含layer.js、layer.css、以及一些示例图片的文件夹。- 官方网站:
https://layer.layui.com/
- 官方网站:
- 上传:通过 FTP 或主机面板,将下载的文件上传到你的 DedeCMS 网站目录中,为了方便管理,建议放在
/static/目录下。- 上传到
/static/layer/目录中。
- 上传到
第 2 步:在模板文件中引入 JS 和 CSS

为了让 layer 在全站生效,最好的方式是在你的全局头部模板 (head.htm) 中引入它的 CSS 和 JS 文件。
- 登录 DedeCMS 后台。
- 进入
模板->默认模板管理。 - 找到你当前使用的模板集,点击
默认首页模板或文章列表页等模板,进入编辑界面。 - 在模板的
<head>和</head>标签之间,添加以下代码:
<!-- 引入 layer 样式文件 -->
<link rel="stylesheet" href="{dede:global.cfg_cmsurl/}/static/layer/theme/default/layer.css" id="layuicss-layer">
<!-- 引入 layer JS 文件,建议放在 body 结束标签前 -->
<script src="{dede:global.cfg_cmsurl/}/static/layer/layer.js"></script>
- 注意:请根据你上传的实际路径修改
href和src属性中的路径。{dede:global.cfg_cmsurl//}是 DedeCMS 的全局变量,代表你的网站根目录。
第 3 步:修改文章内容模板,给图片添加触发事件
我们需要修改文章内容模板 (article_article.htm),让页面上的图片可以被点击并触发 layer 的图片浏览器。
-
继续在模板管理中,找到并打开
article_article.htm(文章内容页模板)。
(图片来源网络,侵删) -
找到文章内容输出标签
{dede:field.body/}。 -
我们需要给这个标签内的所有
<img>标签添加一个class属性,以便用 JS 绑定事件,DedeCMS 的body内容是直接输出的,无法直接修改其内部标签,我们需要使用一个小技巧:在body输出后,用一小段 JavaScript 来动态添加 class。修改
{dede:field.body/}所在的行,将其包裹在一个div中,并添加一个id,方便 JS 选取。<div class="article-content"> {dede:field.body/} </div> -
在模板的底部,
</body>标签之前,添加以下 JavaScript 代码:<script> // 等待整个文档加载完成后再执行 document.addEventListener('DOMContentLoaded', function() { // 获取文章内容容器内的所有图片 var imgs = document.querySelectorAll('.article-content img'); // 遍历所有图片 imgs.forEach(function(img) { // 给每张图片添加一个 class,用于识别 img.classList.add('article-img'); // 给图片添加点击事件 img.addEventListener('click', function() { // 获取图片的真实 src (处理一下相对路径) var imgSrc = this.src; if (imgSrc.indexOf('/') !== 0) { imgSrc = window.location.origin + '/' + imgSrc; } // 调用 layer 的图片浏览器功能 layer.photos({ photos: { "title": "图片预览", // 可选,相册标题 "id": 1, // 可选,相册id "start": 0, // 可选,初始显示的图片索引,默认0 "data": [ { "src": imgSrc, // 当前点击的图片地址 "thumb": "" // 缩略图地址(可选) } ] }, shade: 0.6, // 遮罩透明度 closeBtn: 1, // 关闭按钮 anim: 5 // 切换动画,0-5 }); }); }); }); </script>
第 4 步:清理缓存
完成以上步骤后,回到 DedeCMS 后台,点击 系统 -> 一键更新网站 -> 更新HTML,生成一下首页和文章页,然后清空浏览器缓存,刷新页面测试。
当你点击文章中的任何一张图片时,就会弹出一个美观的全屏图片浏览器了。
手动 DIY 实现(纯 JS + CSS)
如果你对前端比较熟悉,希望完全自定义样式和功能,可以手动实现一个。
核心思路:
- HTML 结构:一个全屏的遮罩层 (
overlay),一个居中显示的图片容器 (image-viewer)。 - CSS 样式:设置遮罩层为半透明黑色,图片容器为固定定位并居中,背景为白色,内部放置大图。
- JavaScript 逻辑:
- 给文章中的所有
<img>标签绑定onclick事件。 - 点击时,获取该图片的
src。 - 动态创建或显示遮罩层和图片容器。
- 将获取到的
src赋值给容器内的<img>- 给遮罩层绑定
onclick事件,点击遮罩层则关闭浏览器。 - 给遮罩层绑定
- 给文章中的所有
操作步骤:
第 1 步:在模板中添加 HTML 结构
在 article_article.htm 模板的最底部,</body> 标签之前,添加以下 HTML 结构:
<!-- 图片浏览器 HTML 结构 -->
<div id="image-overlay" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; cursor: pointer;">
<div id="image-viewer" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 90%; max-height: 90%;">
<img id="viewer-img" src="" alt="" style="max-width: 100%; max-height: 100%; display: block; border: 10px solid #fff; box-shadow: 0 0 20px rgba(0,0,0,0.5);">
</div>
</div>
第 2 步:添加 CSS 样式
你可以将 CSS 直接写在 <style> 标签里,或者像方案一一样单独创建一个 CSS 文件并引入,为了方便,我们直接写在模板里,放在 <head> 标签内。
<style>
/* 图片浏览器样式 */
#image-overlay {
display: none;
}
</style>
第 3 步:编写 JavaScript 逻辑
同样,在 </body> 标签之前,添加以下 JavaScript 代码:
<script>
document.addEventListener('DOMContentLoaded', function() {
var articleContent = document.querySelector('.article-content'); // 假设你给内容区加了 class
if (!articleContent) return;
var imgs = articleContent.querySelectorAll('img');
var overlay = document.getElementById('image-overlay');
var viewerImg = document.getElementById('viewer-img');
imgs.forEach(function(img) {
img.style.cursor = 'pointer'; // 鼠标悬停时显示手型
img.addEventListener('click', function(e) {
e.preventDefault(); // 阻止图片默认的点击行为(如新窗口打开)
var imgSrc = this.src;
viewerImg.src = imgSrc;
overlay.style.display = 'block';
// 防止图片点击事件冒泡到遮罩层
viewerImg.onclick = function(e) {
e.stopPropagation();
};
});
});
// 点击遮罩层关闭浏览器
overlay.addEventListener('click', function() {
this.style.display = 'none';
});
// 按 ESC 键关闭浏览器
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && overlay.style.display === 'block') {
overlay.style.display = 'none';
}
});
});
</script>
第 4 步:清理缓存
同样,更新网站 HTML 并清空浏览器缓存进行测试。
总结对比
| 特性 | 方案一 (layer 插件) | 方案二 (手动 DIY) |
|---|---|---|
| 易用性 | ⭐⭐⭐⭐⭐ (非常简单,配置即用) | ⭐⭐ (需要一定的前端知识) |
| 功能丰富度 | ⭐⭐⭐⭐⭐ (支持图集、分页、标题、动画等) | ⭐⭐ (基础功能,需自行扩展) |
| 定制性 | ⭐⭐ (可通过修改主题文件进行有限定制) | ⭐⭐⭐⭐⭐ (完全自主控制样式和逻辑) |
| 性能 | ⭐⭐⭐ (引入了额外的库文件) | ⭐⭐⭐⭐ (代码精简,无依赖) |
| 推荐人群 | 绝大多数用户,追求快速稳定 | 开发者,有特殊需求或想学习 |
对于普通 DedeCMS 用户,强烈推荐方案一,它能以最小的代价获得一个非常专业和稳定的图片浏览体验。
