html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转

效果图:

 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>图片预览</title><style>body {font-family: Arial, sans-serif;margin: 0;padding: 0;text-align: center;background-color: #f4f4f4;}.thumbnails {display: flex;justify-content: center;margin: 20px;}.thumbnail {width: 80px;height: 80px;margin: 5px;object-fit: cover;border: 2px solid transparent;cursor: pointer;transition: transform 0.2s;}.thumbnail:hover {transform: scale(1.1);}.thumbnail.active {border-color: #007bff;}.modal {display: none;position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0, 0, 0, 0.8);z-index: 1000;justify-content: center;align-items: center;flex-direction: column;}.modal.open {display: flex;}.image-container {max-width: 90%;max-height: 70%;overflow: hidden;position: relative;}.display-image {max-width: 100%;max-height: 100%;transition: transform 0.3s;}.controls {margin-top: 20px;display: flex;justify-content: center;flex-wrap: wrap;gap: 15px;}.icon-button {display: flex;justify-content: center;align-items: center;width: 24px;height: 24px;background-color: rgba(0, 0, 0, 0.5); /* 黑色半透明背景 */color: white;border-radius: 50%;font-size: 20px;cursor: pointer;transition: background-color 0.3s, transform 0.2s;}.icon-button:hover {background-color: rgba(0, 0, 0, 0.8); /* 悬停时更深的黑色 */transform: scale(1.1);}.icon-button:active {transform: scale(0.9);}.icon-button:disabled {background-color: rgba(0, 0, 0, 0.2); /* 禁用时更浅 */cursor: not-allowed;}</style>
</head>
<body>
<h1>图片预览</h1><!-- 缩略图 -->
<div class="thumbnails" id="thumbnailContainer"><img src="imgs/wallhaven-kx5v57.jpg" class="thumbnail" alt="Thumbnail 1"><img src="imgs/wallhaven-wegll6.png" class="thumbnail" alt="Thumbnail 2"><img src="imgs/wallhaven-9m5mk1.png" class="thumbnail" alt="Thumbnail 3">
</div><!-- 弹窗 -->
<div class="modal" id="imageModal"><div class="image-container"><img src="" alt="Current Image" id="currentImage" class="display-image"></div><div class="controls"><div class="icon-button" id="zoomInBtn" title="放大"><svg t="1732241294803" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7668" width="16" height="16"><path d="M867.7 423.8H599.8V155.9c0-49.3-40-89.3-89.3-89.3s-89.3 40-89.3 89.3v267.9H153.3c-49.3 0-89.3 40-89.3 89.3s40 89.3 89.3 89.3h267.9v267.9c0 49.3 40 89.3 89.3 89.3s89.3-40 89.3-89.3V602.4h267.9c49.3 0 89.3-40 89.3-89.3s-40-89.3-89.3-89.3z" fill="#ffffff" p-id="7669"></path></svg></div><div class="icon-button" id="zoomOutBtn" title="缩小"><svg t="1732241472622" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9692" width="16" height="16"><path d="M1.024 448.512h1024v128h-1024z" fill="#ffffff" p-id="9693"></path></svg></div><div class="icon-button" id="resetBtn" title="1:1 缩放"><svg t="1732241553547" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13299" width="16" height="16"><path d="M288 149.333333v725.333334h-85.333333V250.368L136.405333 283.52 98.24 207.146667 213.930667 149.333333H288zM896 149.333333h-74.069333l-115.669334 57.834667 38.144 76.330667L810.666667 250.368V874.666667h85.333333V149.333333z m-320 170.666667h-106.666667v106.666667h106.666667v-106.666667z m0 277.333333h-106.666667v106.666667h106.666667v-106.666667z" p-id="13300" fill="#ffffff"></path></svg></div><div class="icon-button" id="flipBtn" title="翻转"><svg t="1732241626557" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15368" width="16" height="16"><path d="M962.074 490.554L647.271 355.638l125.831-89.881c-65.56-69.108-157.968-112.493-260.747-112.493-174.244 0-319.503 123.884-352.634 288.369l-83.949-34.777C123.56 209.825 300.628 63.32 512.355 63.32c132.973 0 252.063 58.09 334.393 149.833l115.326-82.375v359.776z m-710.47 269.773c65.556 69.108 157.973 112.488 260.752 112.488 174.918 0 320.546-124.873 352.931-290.307l83.868 35.874c-47.481 197.458-224.77 344.377-436.799 344.377-132.973 0-252.068-58.086-334.398-149.828l-115.322 82.37V535.525L377.44 670.441l-125.836 89.886z" p-id="15369" fill="#ffffff"></path></svg></div><div class="icon-button" id="prevBtn" title="上一张"><svg t="1732241691822" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17732" width="16" height="16"><path d="M658.29178 1003.504117l223.006914 0L398.119373 520.342595 881.298746 0 658.291782 0 175.112507 520.342595 658.29178 1003.504117z" p-id="17733" fill="#ffffff"></path></svg></div><div class="icon-button" id="autoPlayBtn" title="自动播放"><svg t="1732241717970" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18888" width="16" height="16"><path d="M891.161 512l-749.992 450v-900l749.992 450z" p-id="18889" fill="#ffffff"></path></svg></div><div class="icon-button" id="nextBtn" title="下一张"><svg t="1732241665540" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17426" width="16" height="16"><path d="M881.298746 520.342595 398.119373 0 175.112486 0 658.29178 520.342595 175.112507 1003.504117l223.006914 0L881.298746 520.342595z" p-id="17427" fill="#ffffff"></path></svg></div><div class="icon-button" id="rotateClockwiseBtn" title="顺时针旋转"><svg t="1732241858925" class="icon" viewBox="0 0 1194 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21128" width="16" height="16"><path d="M0 511.999147c0 282.794195 232.618279 511.999147 519.508467 511.999146a521.812464 521.812464 0 0 0 319.743468-108.543819l-89.343852-93.86651a391.679347 391.679347 0 0 1-230.399616 74.410543c-215.295641 0-389.631351-171.861047-389.63135-383.99936 0-212.05298 174.421043-383.99936 389.63135-383.99936 210.772982 0 382.292696 165.119725 389.119352 371.199381H727.294788l233.72761 255.999573 233.727611-255.999573h-156.15974C1031.678281 222.463629 801.96133 0 519.593801 0 232.703612 0 0 229.204951 0 511.999147z" fill="#ffffff" p-id="21129"></path></svg></div><div class="icon-button" id="rotateCounterClockwiseBtn" title="逆时针旋转"><svg t="1732241885059" class="icon" viewBox="0 0 1194 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22261" width="16" height="16"><path d="M1194.664676 511.999147c0 282.794195-232.618279 511.999147-519.508468 511.999146a521.812464 521.812464 0 0 1-319.743467-108.543819l89.343851-93.86651a391.679347 391.679347 0 0 0 230.399616 74.410543c215.295641 0 389.631351-171.861047 389.631351-383.99936 0-212.05298-174.421043-383.99936-389.631351-383.99936-210.772982 0-382.292696 165.119725-389.119351 371.199381h181.418364l-233.727611 255.999573L0 499.199168h156.15974C162.986395 222.463629 392.703345 0 675.070875 0 961.961063 0 1194.664676 229.204951 1194.664676 511.999147z" fill="#ffffff" p-id="22262"></path></svg></div><div class="icon-button" id="closeBtn" title="关闭"><svg t="1732241912849" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23389" width="16" height="16"><path d="M0 0h1024v1024H0z" fill="#ffffff" fill-opacity="0" p-id="23390"></path><path d="M240.448 168l2.346667 2.154667 289.92 289.941333 279.253333-279.253333a42.666667 42.666667 0 0 1 62.506667 58.026666l-2.133334 2.346667-279.296 279.210667 279.274667 279.253333a42.666667 42.666667 0 0 1-58.005333 62.528l-2.346667-2.176-279.253333-279.253333-289.92 289.962666a42.666667 42.666667 0 0 1-62.506667-58.005333l2.154667-2.346667 289.941333-289.962666-289.92-289.92a42.666667 42.666667 0 0 1 57.984-62.506667z" fill="#ffffff" p-id="23391"></path></svg></div></div></div><script>const thumbnails = document.querySelectorAll('.thumbnail');const modal = document.getElementById('imageModal');const currentImage = document.getElementById('currentImage');const zoomInBtn = document.getElementById('zoomInBtn');const zoomOutBtn = document.getElementById('zoomOutBtn');const resetBtn = document.getElementById('resetBtn');const rotateClockwiseBtn = document.getElementById('rotateClockwiseBtn');const rotateCounterClockwiseBtn = document.getElementById('rotateCounterClockwiseBtn');const flipBtn = document.getElementById('flipBtn');const prevBtn = document.getElementById('prevBtn');const nextBtn = document.getElementById('nextBtn');const autoPlayBtn = document.getElementById('autoPlayBtn');const closeBtn = document.getElementById('closeBtn');let currentIndex = 0;let zoom = 1;let rotation = 0;let flip = 1;let autoPlayInterval;const images = Array.from(thumbnails).map(thumbnail => thumbnail.src);function openModal(index) {currentIndex = index;updateImage();modal.classList.add('open');}function closeModal() {modal.classList.remove('open');clearInterval(autoPlayInterval);}function updateImage() {currentImage.src = images[currentIndex];currentImage.style.transform = `scale(${zoom * flip}, ${zoom})rotate(${rotation}deg)`;thumbnails.forEach((thumbnail, index) => {thumbnail.classList.toggle('active', index === currentIndex);});}function zoomIn() {zoom += 0.1;updateImage();}function zoomOut() {zoom = Math.max(0.1, zoom - 0.1);updateImage();}function resetImage() {zoom = 1;rotation = 0;flip = 1;updateImage();}function rotateClockwise() {rotation += 90;updateImage();}function rotateCounterClockwise() {rotation -= 90;updateImage();}function flipImage() {flip *= -1;updateImage();}function showPrevious() {currentIndex = (currentIndex - 1 + images.length) % images.length;updateImage();}function showNext() {currentIndex = (currentIndex + 1) % images.length;updateImage();}function toggleAutoPlay() {if (autoPlayInterval) {clearInterval(autoPlayInterval);autoPlayInterval = null;autoPlayBtn.textContent = '▶';} else {autoPlayInterval = setInterval(showNext, 3000);autoPlayBtn.textContent = '∥';}}thumbnails.forEach((thumbnail, index) => {thumbnail.addEventListener('click', () => openModal(index));});zoomInBtn.addEventListener('click', zoomIn);zoomOutBtn.addEventListener('click', zoomOut);resetBtn.addEventListener('click', resetImage);rotateClockwiseBtn.addEventListener('click', rotateClockwise);rotateCounterClockwiseBtn.addEventListener('click', rotateCounterClockwise);flipBtn.addEventListener('click', flipImage);prevBtn.addEventListener('click', showPrevious);nextBtn.addEventListener('click', showNext);autoPlayBtn.addEventListener('click', toggleAutoPlay);closeBtn.addEventListener('click', closeModal);</script>
</body>
</html>

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

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

相关文章

Selenium+Java(19):使用IDEA的Selenium插件辅助超快速编写Pages

前言 或是惊叹于Selenium对于IDEA的支持已经达到了这样的地步,又或是由于这个好用的小工具的入口就在那里,它已经陪伴了我这么久,而我这么久的时间却都没有发现它。在突然发现这个功能的一瞬间,真的是喜悦感爆棚,于是赶快写下了这篇文章。希望可以帮助到其他同样在做UI自动…

知识付费系统-直播+讲师入驻+课程售卖+商城系统-v2.1.9版本搭建以及资源分享下载+附带完整安装步骤

知识付费系统-直播讲师入驻课程售卖商城系统-v2.1.9版本搭建以及资源分享下载 这是一款很棒&#xff0c;功能很强大的知识付费系统。 源码下载本帖已经绑定&#xff0c;可直接去下载。 1&#xff0c;源码上传 宝塔一键安装后&#xff0c;添加网站上传源码&#xff0c; 2&…

栈的应用,力扣394.字符串解码力扣946.验证栈序列力扣429.N叉树的层序遍历力扣103.二叉树的锯齿形层序遍历

目录 力扣394.字符串解码 力扣946.验证栈序列 力扣429.N叉树的层序遍历 力扣103.二叉树的锯齿形层序遍历 力扣394.字符串解码 看见括号&#xff0c;由内而外&#xff0c;转向用栈解决。使用两个栈处理&#xff0c;一个用String,一个用Integer 遇到数字:提取数字放入到数字栈…

408代码类复习--图类

图类 Author&#xff1a;Joanh_Lan Personal Blog Links&#xff1a;Joanh_LanのCSDN博客 备注&#xff1a; 个人复习版本 不保证完全正确&#xff0c;理性参考&#xff08;不背锅i哦&#xff09; &#xff08;&#xff1a;&#xff08;&#xff1a;&#xff08;&#xff…

Maven的安装——给Idea配置Maven

一、什么是Maven? Maven是一个开源的项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目生命周期管理。 二、准备环境 maven安装之前&#xff0c;我们要先安装jdk&#xff0c;确保你已经安装了jdk环境。可以通过【win】【r】打开任务管理器&#xff0c;输入…

linux 常用命令指南(存储分区、存储挂载、docker迁移)

前言&#xff1a;由于目前机器存储空间不够&#xff0c;所以‘斥巨资’加了一块2T的机械硬盘&#xff0c;下面是对linux扩容的一系列操作&#xff0c;包含了磁盘空间的创建、删除&#xff1b;存储挂载&#xff1b;docker迁移&#xff1b;anaconda3迁移等。 一、存储分区 1.1 …

OpenCvSharp Demo 饱和度、明度、对比度、锐化、阴影、高光、色温实现滤镜效果

目录 效果 风景-天空滤镜 人像—酷感冷艳滤镜 美食—鲜美滤镜 美食—巧克力滤镜 项目 代码 参考 下载 效果 风景-天空滤镜 人像—酷感冷艳滤镜 美食—鲜美滤镜 美食—巧克力滤镜 项目 代码 using OpenCvSharp; using System; using System.Diagnostics; using Syst…

Easyexcel(4-模板文件)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09; 文件导出 获取 resources 目录下的文件&#xff0c;使用 withTemplate 获…

迁移学习理论与应用

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将一个任务&#xff08;源任务&#xff09;上学到的知识迁移到另一个相关但不完全相同的任务&#xff08;目标任务&#xff09;上&#xff0c;从而提高目标任务的学习效果。这种方法的核心…

近期两篇NeRF/3DGS-based SLAM方案赏析:TS-SLAM and MBA-SLAM

原文链接&#xff1a;近期两篇NeRF/3DGS-based SLAM方案赏析&#xff1a;TS-SLAM and MBA-SLAM paper1&#xff1a;TS-SLAM: 基于轨迹平滑约束优化的神经辐射场SLAM方法 导读 本文提出了TS-SLAM&#xff0c;一种改进的基于神经辐射场&#xff08;NeRF&#xff09;的SLAM方法…

游戏引擎学习第20天

视频参考:https://www.bilibili.com/video/BV1VkBCYmExt 解释 off-by-one 错误 从演讲者的视角&#xff1a;对代码问题的剖析与修复过程 问题的起因 演讲者提到&#xff0c;他可能无意中在代码中造成了一个错误&#xff0c;这与“调试时间标记索引”有关。他发现了一个逻辑问题…

《鸿蒙系统:开启智能新时代的璀璨之星》

一、鸿蒙系统&#xff1a;崛起之路 鸿蒙系统的发展历程堪称一部科技创新的传奇。2012 年&#xff0c;华为前瞻性地启动鸿蒙系统研发项目&#xff0c;彼时或许很少有人能预见到它未来的辉煌。2019 年&#xff0c;鸿蒙系统首个开发者预览版的发布&#xff0c;如同夜空中的一颗璀…

SQL注入--DNSlog外带注入--理论

什么是DNSlog? DNS的作用是将域名解析为IP 而DNSlog就是存储在DNS服务器上的域名信息&#xff0c;它记录着用户对域名访问信息。可以理解为DNS服务器上的日志文件。 多级域名 比如blog.csdn.net&#xff0c;以点为分隔&#xff0c;从右向左依次是顶级域名、二级域名、三级域…

python: Serialize and Deserialize complex JSON using jsonpickle

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # Serialize and Deserialize complex JSON in Python # 描述&#xff1a;pip install jsonpickle https://github.com/jsonpi…

基于图的去中心化社会推荐过滤器

目录 原论文研究背景与研究意义概述论文所提出算法的主要贡献GDSRec算法原理与流程问题定义去中心化图&#xff08;decentralized graph&#xff09;所提出方法(三种并行建模)用户建模&#xff08;user modelling&#xff09; 模版代码讲解main.py顶层文件&#xff1a;用于集成…

计算机的错误计算(一百六十三)

摘要 四个算式“sin(0.00024/2)^2”、“(1-cos(0.00024))/2”、“(1-sqrt(1-sin(0.00024)^2))/2”以及“sin(0.00024)^2/(22*sqrt(1-sin(0.00024)^2))”是等价的。但是&#xff0c;在 MATLAB 中计算它们&#xff0c;输出不完全一致&#xff1a;中间两个算式的输出中含有错误数…

递归算法专题一>Pow(x, n)

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public double myPow(double x, int n) {return n < 0 ? 1.0 / pow(x,-n) : pow(x,n); }private double pow(double x, int n){if(n 0) return 1.0;double tmp pow(x,n / 2);return n % 2 0 ? tmp * tmp : tmp …

论文阅读 SimpleNet: A Simple Network for Image Anomaly Detection and Localization

SimpleNet: A Simple Network for Image Anomaly Detection and Localization 摘要&#xff1a; 该论文提出了一个简单且应用友好的网络&#xff08;称为 SimpleNet&#xff09;来检测和定位异常。SimpleNet 由四个组件组成&#xff1a;&#xff08;1&#xff09;一个预先训练的…

实战分享:如何在HP-UX上高效扩容Oracle 12c RAC ASM磁盘

文章目录 Oracle 12c RAC ASM磁盘扩容 for HP-UX一、扩容原因二、扩容前信息三、扩容详细步骤3.1 存储划分LUN&#xff0c;映射到Oracle 12c RAC相关主机组3.2 扫描查看磁盘3.3 检查两节点间的磁盘盘符是否一致3.4 以一个节点为准同步磁盘盘符3.5 更改磁盘属主、权限3.6 查看AS…

如何使用 Matlab 制作 GrabCAD 体素打印切片

本教程适用于已经对 Matlab 和 J750 操作有所了解的用户。 它不是有关如何使用 Matlab 软件或 PolyJet 打印机的全面课程。 Stratasys 为您提供以下内容&#xff1a; 第 1 步&#xff1a;什么是体素&#xff1f; 就像 2D 数字图像由像素组成一样&#xff0c;您可以将 3D 数字形…