dede弹出图片浏览器如何实现?

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 DEDE建站 正文
  1. 使用现成的成熟插件(推荐,最简单)
  2. 手动 DIY 实现(最灵活,可定制化)

使用现成的成熟插件(推荐)

对于大多数用户来说,直接使用由社区开发者制作好的插件是最高效、最安全的选择,这些插件通常已经处理好了兼容性和各种细节。

dede弹出图片浏览器
(图片来源网络,侵删)

推荐插件:layer 弹出层插件

layer 是一款被广泛使用的 Web 弹出层组件,功能强大,风格美观,且对 DedeCMS 有很好的兼容性。

操作步骤:

第 1 步:下载并上传插件文件

  1. 下载:访问 layer 的官方网站或 GitHub 仓库下载最新版,通常你会得到一个包含 layer.jslayer.css、以及一些示例图片的文件夹。
    • 官方网站:https://layer.layui.com/
  2. 上传:通过 FTP 或主机面板,将下载的文件上传到你的 DedeCMS 网站目录中,为了方便管理,建议放在 /static/ 目录下。
    • 上传到 /static/layer/ 目录中。

第 2 步:在模板文件中引入 JS 和 CSS

dede弹出图片浏览器
(图片来源网络,侵删)

为了让 layer 在全站生效,最好的方式是在你的全局头部模板 (head.htm) 中引入它的 CSS 和 JS 文件。

  1. 登录 DedeCMS 后台。
  2. 进入 模板 -> 默认模板管理
  3. 找到你当前使用的模板集,点击 默认首页模板文章列表页 等模板,进入编辑界面。
  4. 在模板的 <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>
  • 注意:请根据你上传的实际路径修改 hrefsrc 属性中的路径。{dede:global.cfg_cmsurl//} 是 DedeCMS 的全局变量,代表你的网站根目录。

第 3 步:修改文章内容模板,给图片添加触发事件

我们需要修改文章内容模板 (article_article.htm),让页面上的图片可以被点击并触发 layer 的图片浏览器。

  1. 继续在模板管理中,找到并打开 article_article.htm (文章内容页模板)。

    dede弹出图片浏览器
    (图片来源网络,侵删)
  2. 找到文章内容输出标签 {dede:field.body/}

  3. 我们需要给这个标签内的所有 <img> 标签添加一个 class 属性,以便用 JS 绑定事件,DedeCMS 的 body 内容是直接输出的,无法直接修改其内部标签,我们需要使用一个小技巧:在 body 输出后,用一小段 JavaScript 来动态添加 class。

    修改 {dede:field.body/} 所在的行,将其包裹在一个 div 中,并添加一个 id,方便 JS 选取。

    <div class="article-content">
        {dede:field.body/}
    </div>
  4. 在模板的底部,</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)

如果你对前端比较熟悉,希望完全自定义样式和功能,可以手动实现一个。

核心思路:

  1. HTML 结构:一个全屏的遮罩层 (overlay),一个居中显示的图片容器 (image-viewer)。
  2. CSS 样式:设置遮罩层为半透明黑色,图片容器为固定定位并居中,背景为白色,内部放置大图。
  3. 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 用户,强烈推荐方案一,它能以最小的代价获得一个非常专业和稳定的图片浏览体验。

-- 展开阅读全文 --
头像
链式存储结构C语言如何实现线性表操作?
« 上一篇 03-05
dede大淘客模板怎么用?
下一篇 » 03-05

相关文章

取消
微信二维码
支付宝二维码