当前位置: 首页 > news >正文

前端(十五)——GitHub开源一个react封装的图片预览组件

在这里插入图片描述

👵博主:小猫娃来啦
👵文章核心:GitHub开源一个react封装的图片预览组件

文章目录

  • 组件开源代码下载地址
  • 运行
  • 效果展示
  • 实现思路
  • 使用思路和api
  • 实现的功能
  • 数据和入口
  • 部分代码展示

组件开源代码下载地址

Gitee:点此跳转下载
CSDN:点此跳转下载
GitHub:点此跳转下载




运行

装依赖

npm i   

运行

npm start

打开

http://localhost:3000/



效果展示

在这里插入图片描述在这里插入图片描述




实现思路

  • 创建一个React函数组件并命名为ImageGallery
  • 在组件内部,使用useState钩子来定义状态变量,并初始化为合适的初始值。

selectedImageUrl来追踪当前选中的图片URL;
isOpen来追踪模态框的显示状态;
zoomLevel来追踪图片的缩放级别;
rotateDeg来追踪图片的旋转角度;
flipState来追踪图片的翻转状态等。

  • 渲染组件时,使用map()方法遍历传入的图片URL数组,并为每个元素创建一个缩略图。为每个缩略图添加点击事件处理函数,以便在点击时更新selectedImageUrlisOpen的状态。
  • 在模态框中,根据isOpen的状态决定是否显示模态框。如果isOpen为真,则显示模态框。
  • 在模态框中,显示选中的大图。根据zoomLevelrotateDeg应用相应的样式来缩放和旋转图片。

使用CSS的transform属性来实现缩放和旋转效果。

  • 在模态框中,添加放大、缩小、旋转和翻转的功能按钮。为每个按钮添加点击事件处理函数,以便在点击时更新相应的状态变量,如zoomLevel、rotateDegflipState
  • 为模态框添加键盘事件监听。根据按下的键码来触发不同的操作,例如切换图片、放大缩小等功能。
  • 实现拖拽功能,通过鼠标事件监听鼠标按下、移动和松开的过程,在对应的事件处理函数中计算鼠标位移距离,并更新图片的位置。
  • 添加全屏展示功能。为模态框添加全屏按钮,并在点击时调用浏览器的Fullscreen API来进入或退出全屏模式。



使用思路和api

我觉得react没有顺手的图片预览组件,然后就自己封装一个,放在项目文件里,自己本地导入使用,需要微调。也不用担心组件之间的高耦合度,自己也可以控制。

API全部在代码里,手动微调即可。




实现的功能

拖拽,上下左右翻转、旋转,全屏,缩放,缩略图高亮
具体描述如下,缩放级别等数据可以自己改。在哪里改,都有注释,非常清晰

  • 点击缩略图可以在模态框中展示选中的图片,并带有高亮。
  • 可以放大和缩小图片,最大放大到130%,最小缩小到30%。
  • 可以旋转图片,左旋转和右旋转分别是每次旋转90度。
  • 可以上下翻转和水平翻转图片,点击按钮可以进行翻转和恢复默认状态。
  • 可以使用键盘的箭头键进行上一张和下一张图片的切换,同时也支持使用键盘的上下箭头进行放大和缩小。
  • 可以通过拖拽图片进行位置的调整,鼠标按下开始拖拽,松开结束拖拽。
  • 可以进入全屏模式查看图片,再次点击退出全屏。
  • 在模态框中显示缩略图,点击缩略图可以切换到相应的图片。



数据和入口

数据是在APP.jsx里的data,可以换成接口请求到的图片数组
数据入口是在APP.jsx里的<ImagePreview images={images}></ImagePreview>标签上,这个images就是data这个图片数组

在这里插入图片描述




部分代码展示

⭐⭐⭐⭐⭐css
在这里插入图片描述




⭐⭐⭐⭐⭐jsx
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


相关文章:

前端(十五)——GitHub开源一个react封装的图片预览组件

&#x1f475;博主&#xff1a;小猫娃来啦 &#x1f475;文章核心&#xff1a;GitHub开源一个react封装的图片预览组件 文章目录 组件开源代码下载地址运行效果展示实现思路使用思路和api实现的功能数据和入口部分代码展示 组件开源代码下载地址 Gitee&#xff1a;点此跳转下载…...

DELL Power Edge R740 安装 OracleLinux-R7-U9-Server

一、准备好 OracleLinux-R7-U9-Server-x86_64-dvd 安装介子&#xff1a; 二、通过 iDRAC挂dvd 安装介子 三、在 iDRAC 开机控制选择虚拟 CD/DCD/ISO 电源控制选择 复位系统&#xff08;热启动&#xff09; 四、进入安装阶段 五、配置时区 六、配置磁盘 七、删除之前的旧分区 …...

深入了解OpenStack:创建定制化QCOW2格式镜像的完全指南

OpenStack 创建自定义的QCOW2格式镜像 前言 建议虚机网络配置为 NAT 或 桥接&#xff0c;因为未来 KVM虚机 需要借助 虚机 的外网能力进行联网安装软件包 虚机在启动前&#xff0c;必须在 VMware Workstation 上为其开启虚拟化引擎 虚拟化 Intel VT-x/EPT 或 AMD-V 安装kvm …...

【Java 中级】一文精通 Spring MVC - 数据格式化器(六)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…...

Linux内核学习(十二)—— 页高速缓存和页回写(基于Linux 2.6内核)

目录 一、缓存手段 二、Linux 页高速缓存 三、flusher 线程 Linux 内核实现了一个被叫做页高速缓存&#xff08;page cache&#xff09;的磁盘缓存&#xff0c;它主要用来减少对磁盘的 I/O 操作。它是通过把磁盘中的数据缓存到内存中&#xff0c;把对磁盘的访问变为对物理内…...

大数据-玩转数据-Flink窗口函数

一、Flink窗口函数 前面指定了窗口的分配器, 接着我们需要来指定如何计算, 这事由window function来负责. 一旦窗口关闭, window function 去计算处理窗口中的每个元素. window function 可以是ReduceFunction,AggregateFunction,or ProcessWindowFunction中的任意一种. Reduc…...

Docker网络-探索容器网络如何相互通信

当今世界&#xff0c;企业热衷于容器化&#xff0c;这需要强大的网络技能来正确配置容器架构&#xff0c;因此引入了 Docker Networking 的概念。Docker 是一种容器化平台&#xff0c;允许您在独立、轻量级的容器中运行应用程序和服务。Docker 提供了一套强大的网络功能&#x…...

ESP32-CAM模块Arduino环境搭建测试

ESP32-CAM模块Arduino环境搭建测试 一.ESP32OV2640摄像头模块CameraWebServer视频查看 二.测试ESP32-CAM(后续称cam模块)代码是否上传执行成功测试 const int led0 12; const int led1 13;void setup() {// put your setup code here, to run once:pinMode(led0, OUTPUT);pin…...

webassembly001 webassembly简述

WebAssembly 官方地址:https://webassembly.org/相关历史 https://en.wikipedia.org/wiki/WebAssembly https://brendaneich.com/2015/06/from-asm-js-to-webassembly/WebAssembly&#xff08;缩写为Wasm&#xff09;是一种基于堆栈的虚拟机的二进制指令格式。Wasm 被设计为编…...

vue 使用C-Lodop打印小票

先从官网下载js文件 https://www.lodop.net/LodopDemo.html 打开安装程序&#xff0c;一直下一步既可&#xff0c;我这边已经安装过就不演示了。 // 引入 import { getLodop } from /utils/CLodopfuncs.js;// 使用 let LODOP getLodop()let Count LODOP.GET_PRINTER_COUNT…...

【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; vector 1. 前言2. 熟悉vector的接口函数2.1 vec…...

1. import pandas as pd 导入库

【目录】 文章目录 1. import pandas as pd 导入库1. pandas库的概念2. 导入pandas库2.1 常规导入2.2 别名导入 3. 别名的作用4. 课堂练习 【正文】 1. import pandas as pd 导入库 【学习时间】 10分钟 1. pandas库的概念 pandas&#xff1a;熊猫panda的复数&#xff0c; …...

DMK5框选变量之后不显示其他位置的此变量高亮

使用软件MDK5.3.8版本 如下在2的位置选择之后&#xff0c;其他同样的变量没有高亮&#xff0c;因为1的原因折叠了&#xff1b; 展开折叠之后就可以了...

0061__Appium

Appium Documentation - Appium Documentation APP自动化测试&#xff08;3&#xff09;-Appium Inspector介绍_六天测试工程师的博客-CSDN博客 https://github.com/appium/appium-inspector https://github.com/appium/appium-desktop https://github.com/appium/appium...

【DEVOPS】需求跟踪管理全面落地

0. 目录 1. 现状/背景2. 需求管理存在的问题3. 改进思路/措施4. 所谓"禅道尚未普及/铺开"5. 最后6. 相关 1. 现状/背景 近期又被领导问到"如何对项目过程中的需求进行量化和跟踪管理"。这真是一个狗皮膏药似的问题&#xff0c;反反复复地&#xff0c;隔一…...

算法修炼Day57|647. 回文子串 ● 516.最长回文子序列

LeetCode:647. 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 1.思路 暴力思路见对应代码… 动规解法&#xff1a;画图推导动规公式&#xff0c;当前状态由左侧和左下角推出&#xff0c;所以首层应该采用倒序的方式&#xff0c;内部采用正序的方式。 2.…...

呈现数据的精妙之道:选择合适的可视化方法

在当今数据时代&#xff0c;数据可视化已成为理解和传达信息的重要手段。然而&#xff0c;选择适合的数据可视化方法对于有效地呈现数据至关重要。不同的数据和目标需要不同的可视化方法&#xff0c;下面我们将探讨如何选择最佳的数据可视化方法来呈现数据。 1. 理解数据类型&a…...

数据结构(Java实现)-java对象的比较

元素的比较 基本类型的比较 在Java中&#xff0c;基本类型的对象可以直接比较大小。 对象比较的问题 Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较 默认情况下调用的就是equal方法&#xff0c;但是该方法的比较规则是&#xff1a;没有比较引用变量引用对象的…...

Wolfram Mathematica 13 for Mac 数学计算工具

Wolfram Mathematica for Mac是一款功能强大、划时代的科学计算软件。它结合了数字和符号计算引擎、图形系统、编程语言、文本系统以及与其他应用程序的高级连接&#xff0c;在许多功能方面处于世界领先地位&#xff0c;截至2009年&#xff0c;它是使用最广泛的数学软件之一。人…...

系统架构设计高级技能 · Web架构

现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 Web架构 一、Web架构介绍1.1 Web架构涉及技术1.2 单台服务…...

硬核盘点|2026年好用AI论文写作工具榜单,毕业论文免费写还合规

2026 年实测 10 款主流 AI 论文工具&#xff0c;千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜&#xff1b;ThouPen 稳坐留学生毕业全流程工具头把交椅&#xff1b;免费工具中DeepSeek Scholar、豆包学术版表现亮眼&#xff0c;30 分钟即可生成万字高质量初稿&#xff0…...

AT25SF041 SPI Flash驱动设计与嵌入式可靠性实践

1. AT25SF041 SPI Flash 存储器驱动深度解析AT25SF041 是由 Adesto&#xff08;现为 Dialog Semiconductor&#xff09;推出的 4 Mbit&#xff08;512 KB&#xff09;串行 NOR Flash 存储器&#xff0c;采用标准四线 SPI 接口&#xff08;CLK、CS#、DI、DO&#xff09;&#xf…...

Spring Framework测试框架完整指南:从单元测试到集成测试的10个最佳实践

Spring Framework测试框架完整指南&#xff1a;从单元测试到集成测试的10个最佳实践 【免费下载链接】spring-framework spring-projects/spring-framework: 一个基于 Java 的开源应用程序框架&#xff0c;用于构建企业级 Java 应用程序。适合用于构建各种企业级 Java 应用程序…...

FSearch:极速文件搜索工具,让Linux文件查找告别等待

FSearch&#xff1a;极速文件搜索工具&#xff0c;让Linux文件查找告别等待 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 还在为Linux系统中查找文件而烦恼吗&#…...

【实战指南】如何用nvitop解决GPU资源监控与管理难题

【实战指南】如何用nvitop解决GPU资源监控与管理难题 【免费下载链接】nvitop An interactive NVIDIA-GPU process viewer and beyond, the one-stop solution for GPU process management. 项目地址: https://gitcode.com/gh_mirrors/nv/nvitop 在深度学习训练、科学计…...

求一个V站邀请码

有没有大佬可以给个邀请码~~~~~~~~~~~~~~~~~~...

极速上手:Puppeteer + 原生代理IP 突破无头检测(金融与突发新闻抓取 Cheat Sheet)

在金融量化分析、宏观经济数据追踪或突发新闻监控等场景中&#xff0c;数据价值随时间呈指数级衰减。高频并发抓取极易触发目标网站的反爬策略&#xff08;如 Cloudflare 盾、无头浏览器指纹识别&#xff09;以及严苛的 IP 封禁。 终极解法&#xff1a; 使用 puppeteer-extra-…...

告别卡顿!用UniApp的RenderJS为你的APP手势和动画性能提速(实战解析)

告别卡顿&#xff01;用UniApp的RenderJS为你的APP手势和动画性能提速&#xff08;实战解析&#xff09; 在移动应用开发中&#xff0c;流畅的用户体验往往决定了产品的成败。当你在UniApp框架下开发APP时&#xff0c;是否遇到过这样的场景&#xff1a;地图拖拽时出现明显延迟&…...

基于PLC1200的水箱液位解耦控制系统(过程控制课程设计) #笔记学习资料 内含: 1

基于PLC1200的水箱液位解耦控制系统&#xff08;过程控制课程设计&#xff09; #笔记学习资料 内含&#xff1a; 1.PLC控制程序&#xff08;博图V18&#xff09; 2.设计报告&#xff08;pdf版本&#xff0c;详细介绍整个项目设计方案、Simulink仿真模型结构图、仿真结果、PLC梯…...

Stable Diffusion VAE重构图像效果不理想?可能是你忘了调整这个关键参数

Stable Diffusion VAE图像重构效果优化指南&#xff1a;关键参数解析与实战调整 当你第一次使用Stable Diffusion的VAE&#xff08;Variational Autoencoder&#xff09;进行图像重构时&#xff0c;可能会遇到这样的困惑&#xff1a;明明按照教程一步步操作&#xff0c;为什么输…...