模拟从D盘查找图片文件进行预览改进版

news2024/12/21 12:40:00
<style>
        #files button {
            margin-right: 10px;
            background-color: #0b4180;
            color: white;
        }

        #files button:hover {
            background-color: #00B83F;
            color: #0C0C0C;
        }

        #file-list li:hover {
            cursor: pointer;
            color: red;
        }

        #showImg {
            width: 100%; /* 图片宽度100% */
            max-height: 80vh; /* 图片最大高度为视口的80% */
            object-fit: contain; /* 保持图片比例 */
        }
         /* 模态框样式 */
        .modal {
            display: none; /* 默认隐藏模态框 */
            position: fixed;
            z-index: 1;
            padding-top: 100px;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: auto;
            background-color: rgba(0,0,0,0.4);
        }
        .modal-content {
            /*background-color: #0A1A35;*/
            margin: auto;
            padding: 20px;
            border: 1px solid #888;
            width: 80%;
            max-width: 600px;
        }
    </style>
<div id="files">
     <h1>文件浏览</h1>
     <button id="backfirst">返回上一级</button>
     <ul id="file-list"></ul>
</div>

<!-- 模态框容器 -->
<div id="myModal" class="modal">
    <!-- 模态框内容 -->
    <div class="modal-content">
        <img id="showImg" style="display: none;">
    </div>
</div>

JS部分:

 const baseURL = 'http://localhost:15112/browse/'; // 修改为你的后端服务器地址
    let currentPathStack = ['files']; // 使用栈来记录当前路径
    $(document).ready(function () {
        fetchFiles();
    });
    function fetchFiles() {
        const path = currentPathStack[currentPathStack.length - 1]; // 获取当前路径
        console.log('当前路径:', path)
        $.ajax({
            type: 'GET',
            url: `${baseURL}${path}`,
            success: function (data) {
                const fileList = $('#file-list');
                fileList.empty(); // 清空之前的列表
                console.log('原始数据', data)
                data.forEach(item => {
                    const li = $('<li></li></br>');
                    li.text(item.name);
                    li.on('click', function (e) {
                        //e.stopPropagation(); // 阻止事件冒泡,防止点击 li 时触发 ul 的点击事件
                        if (item.directory == true) {
                            currentPathStack.push(`${path}-${item.name}`); // 将当前文件夹名推入栈中
                            $('#backfirst').prop('disabled', false); // 启用返回按钮
                            $('#showImg').hide();
                            fetchFiles(); // 递归调用以加载新目录的内容
                        } else if (item.directory == false) {
                            $('#showImg').attr('src', `data:image/jpeg;base64,${item.data}`);
                            $('#showImg').show(); // 显示图片
                            // 显示关闭图片的按钮
                            modal.style.display = "block";//显示模态框
                        }
                    });
                    fileList.append(li);
                });
                // 如果栈中不止一个元素(即不在根目录),则启用返回按钮
                $('#backfirst').prop('disabled', currentPathStack.length <= 1);
            },
            error: function (error) {
                console.error('请求失败:', error);
            }
        });
    }
    // 返回上一级目录
    $('#backfirst').click(function () {
        if (!$(this).is(':disabled')) { // 确保按钮没有被禁用
            currentPathStack.pop(); // 弹出当前路径
            // 在返回上一级目录时,隐藏图片并隐藏关闭按钮
            $('#showImg').hide();
            fetchFiles(); // 加载上一级目录的内容
        }
    });

 // 获取模态框
    const modal = document.getElementById("myModal");
    // 获取模态框中的图片元素
    const modalImg = document.getElementById("modalImg");    // 显示模态框
    function showModal(src) {
        modal.style.display = "block";
    }
    // 隐藏模态框
    function hideModal() {
        modal.style.display = "none";
    }
    // 当用户点击模态框以外的区域时,关闭模态框
    window.onclick = function(event) {
        if (event.target == modal) {
            hideModal();
        }
    }

效果展示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1625353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三种类的免费SSL证书

目前主流的三种域名证书&#xff1a;单域名证书、多域名证书、通配符泛域名证书。 这三种类型的证书根据用户域名的不同情况&#xff0c;应用场景也大不相同。 单域名证书应用场景&#xff1a; 针对于有且只有一个单独域名的单位&#xff0c;使用单域名证书是刚好能够满足需求…

python逆向基础流程(纯小白教程)

一&#xff0c;例题链接 NSSCTF | 在线CTF平台 二&#xff0c;文件特征 使用工具查看文件信息&#xff0c;发现是pyinsatller打包的exe文件&#xff0c;如果硬用ida分析成汇编或c语言根本摸清楚程序的逻辑&#xff0c;所以思路是反编译成py文件直接分析python代码 三&#xf…

Idea:阿里巴巴Java编码插件

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、Alibaba Java Coding Guidelines插件介绍 二、使用步骤 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Alibaba Java Coding …

性能测试学习一

文章目录 什么是性能测试性能项目分类性能测试流程在这里插入图片描述 场景分类基准场景 容量场景稳定性场景性能指标性能指标 分布式压测 日期&#xff1a;2024年4月19日 从今日起开始系统更新性能测试学习笔记&#xff0c;一方面督促自身的学习进度&#xff0c;另一方面提高专…

网络爬虫之HTTP原理

** URI和URL URI的全称Uniform Resource Identifier &#xff0c;即统一资源标志符。URL的全称Uniform Resource Locator 即统一资源定位符。 URL是URI的子集&#xff0c;也就是每一个URL就是URI&#xff0c;但是每一个URI不一定是URL&#xff0c;URI还有一个子类叫URN&#x…

企业微信hook接口协议,ipad协议http,发送大视频文件

发送大视频文件 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信send_userid是long要发送的人或群idisRoom是bool是否是群消息 请求示例 {"uuid":"1688853790xxx", //uuid 默认随机生成如果初始化传了id则用初始…

数组和指针有什么区别?

数组&#xff08;Array&#xff09;和指针&#xff08;Pointer&#xff09;是计算机编程中常见的两种数据类型&#xff0c;它们在内存中的表示和使用方式有着显著的区别。 1. 内存中的表示&#xff1a; 数组&#xff1a; 数组是一组相同类型的元素在内存中连续存储的集合。在…

企业数字化管理是什么,如何建立企业数字化管理?

前言 随着信息技术的迅猛发展和数字化浪潮的席卷&#xff0c;企业数字化管理已成为现代企业管理的重要趋势。数字化管理不仅有助于提升企业的运营效率和市场竞争力&#xff0c;还能为企业创造更多的商业价值和机遇。因此&#xff0c;深入了解和掌握企业数字化管理的内涵和建立…

【企业管理战略方案设计】经营驱动与管理控制相结合

在企业发展过程中&#xff0c;是经营为先&#xff0c;还是管理为先&#xff1f;是经营重要还是管理重要&#xff1f;不同的人可能会有不同的答案&#xff0c;也会有不同的简介。但是如何将经营与管理有机地结合在一起&#xff0c;将冲锋陷阵的前方经营与补充粮草的后方管理加以…

C#实现TFTP客户端

1、文件结构 2、TftpConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace TftpTest {public class TftpConfig{}/// <summary>/// 模式/// </summary>public enum Modes{…

前端单元测试的艺术:专业化策略与Vue项目高效实践指南

单元测试是软件开发中的基石&#xff0c;尤其对于前端领域&#xff0c;它为保证代码质量、提升开发效率、强化项目稳定性提供了不可或缺的支持。本文将深入剖析单元测试的核心理念&#xff0c;揭示其在前端开发中的独特价值&#xff0c;并提炼出一套专业且高效的实践策略&#…

闲谈工作边界

在程序员的日常工作中&#xff0c;会遇到很多边界问题。如果这些边界问题不处理好&#xff0c;会面临诸多问题。切不可忽略边界问题&#xff0c;因为这些边界很有可能是日后帮助你摆脱扯皮&#xff0c;避免被甩锅&#xff0c;甚至于好心办坏事。 那么我们来谈一下如何处理边界问…

关于螺栓的注意事项和正确操作方法——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓&#xff0c;作为一种常见的紧固件&#xff0c;广泛应用于各种机械设备和结构中。在日常生活和工作中&#xff0c;我们经常需要接触到螺栓&#xff0c;因此了解螺栓的一些注意事项和正确操作方法对于确保设备的安全…

ASP.NET集成客户关系管理的企业网站的设计与开发

摘 要 企业要在激烈的市场竞争中立于不败之地&#xff0c;就必须找一种全新的管理理念和管理手段&#xff0c;对其内部和外部资源进行有效的整合。新一代ERP产品正在向客户端和供应端延伸&#xff0c;客户端的延伸即是客户关系管理。对于每个企业来说客户管理的完善程度将直接…

2024新版计算机网络视频教程65集完整版(视频+配套资料)

今日学计算机网络&#xff0c;众生皆叹难理解。 却见老师神乎其技&#xff0c;网络通畅如云烟。 协议层次纷繁复杂&#xff0c;ARP、IP、TCP、UDP。 路由器交换机相连&#xff0c;数据包穿梭无限。 网络安全重于泰山&#xff0c;防火墙、加密都来添。 恶意攻击时刻存在&#xf…

平衡二叉树、红黑树、B树、B+树

Tree 1、前言2、平衡二叉树和红黑树3、B树和B树3.1、B树的构建3.2、B树和B树的区别3.3、数据的存储方式 1、前言 本文侧重在理论方面对平衡二叉树、红黑树、B树和B树的各方面性能进行比较。不涉及编程方面的实现。而关于于平衡二叉树在C中的实现&#xff0c;我的上一篇文章平衡…

【openLooKeng-1.10.0集群环境安装部署】

openLooKeng-1.10.0集群环境安装部署 一、摘要二、正文1. 环境说明2. 集群拓扑图3. 安装过程(以root用户安装)3.1 在Coordinator和Worker两个节点都需要安装jdk1.8+3.2 在Coordinator上安装配置openLooKeng3.3 在Worker节点上进行配置openLooKeng3.4 在Coordinator节点上先启…

Oracle Analytics BIEE 操作方法(六)数据格式1:百分比

问题&#xff1a; 有如下公式&#xff0c;将数据显示为按行的百分比。此时数据显示只会有一位小数。想显示两位 解决方案 在分析中找到“高级”标签&#xff0c;将“分析XML”中内容复制出来 替换 将&#xff1a;minDigits“1” maxDigits“1” 替换为&#xff1a;minDigits…

Quarto Dashboards 教程 3:Dashboard Data Display

「写在前面」 学习一个软件最好的方法就是啃它的官方文档。本着自己学习、分享他人的态度&#xff0c;分享官方文档的中文教程。软件可能随时更新&#xff0c;建议配合官方文档一起阅读。推荐先按顺序阅读往期内容&#xff1a; 1.quarto 教程 1&#xff1a;Hello, Quarto 2.qu…

FineBi中创建自定义的图表

FineBi中增加自己的自定义图表组件,比如: 的相关笔记: 1 获取有哪些BI自定义图表组件:http://localhost:8080/webroot/decision/v5/plugin/custom/component/list?_=1713667435473[{"name": "图表DEMO_EK","chartType": "amap_demo&q…