Web 页面实现图片放大镜效果

news/2025/3/24 4:50:46/文章来源:https://www.cnblogs.com/yuzhihui/p/18785178

Web 页面实现图片放大镜效果

下面是一个完整的示例代码:

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>图片放大镜效果</title><style>.container {position: relative;width: 400px;margin: 20px auto;}.main-image {width: 400px;height: 400px;position: relative;border: 1px solid #ccc;}.magnifier {position: absolute;width: 100px;height: 100px;background: rgba(0, 0, 0, 0.3);border: 1px solid #999;cursor: none;display: none;}.zoom-area {position: absolute;width: 300px;height: 300px;border: 1px solid #ccc;left: 420px;top: 0;overflow: hidden;display: none;}.zoom-image {position: absolute;width: 1200px; /* 放大倍数 = 3倍 (300/100) */height: 1200px;}</style></head><body><div class="container"><div class="main-image"><imgsrc="https://via.placeholder.com/400"alt="图片"style="width: 100%; height: 100%;"/><div class="magnifier"></div></div><div class="zoom-area"><imgclass="zoom-image"src="https://via.placeholder.com/1200"alt="放大图片"/></div></div><script>const mainImage = document.querySelector(".main-image");const magnifier = document.querySelector(".magnifier");const zoomArea = document.querySelector(".zoom-area");const zoomImage = document.querySelector(".zoom-image");const magnifierSize = 100; // 放大镜尺寸const zoomRatio = 3; // 放大倍数mainImage.addEventListener("mouseenter", () => {magnifier.style.display = "block";zoomArea.style.display = "block";});mainImage.addEventListener("mouseleave", () => {magnifier.style.display = "none";zoomArea.style.display = "none";});mainImage.addEventListener("mousemove", (e) => {// 获取图片的边界const rect = mainImage.getBoundingClientRect();// 计算鼠标在图片中的相对位置let x = e.clientX - rect.left;let y = e.clientY - rect.top;// 限制放大镜位置不超过图片边界x = Math.max(magnifierSize / 2,Math.min(x, rect.width - magnifierSize / 2));y = Math.max(magnifierSize / 2,Math.min(y, rect.height - magnifierSize / 2));// 设置放大镜位置magnifier.style.left = x - magnifierSize / 2 + "px";magnifier.style.top = y - magnifierSize / 2 + "px";// 计算并设置放大图片的位置const zoomX = (x - magnifierSize / 2) * zoomRatio;const zoomY = (y - magnifierSize / 2) * zoomRatio;zoomImage.style.left = -zoomX + "px";zoomImage.style.top = -zoomY + "px";});</script></body>
</html>

这个示例实现了以下功能:

  1. 主要组件:

    • 一个 400x400px 的主图片区域
    • 一个 100x100px 的跟随鼠标移动的放大镜
    • 一个 300x300px 的放大显示区域(放大 3 倍)
  2. 工作原理:

    • 鼠标进入图片时显示放大镜和放大区域
    • 鼠标离开图片时隐藏放大镜和放大区域
    • 鼠标移动时:
      • 放大镜跟随鼠标移动,始终以鼠标为中心
      • 放大区域显示对应位置的放大内容
      • 放大镜不会超出图片边界
  3. 使用说明:

    • 将示例中的图片 URL(https://via.placeholder.com/400https://via.placeholder.com/1200)替换为实际的图片
    • 注意:需要准备两张图片,一张正常尺寸(400x400),一张大尺寸(1200x1200)
    • 大图尺寸应该是小图尺寸乘以放大倍数(这里是 3 倍)
  4. 可自定义参数:

    • .main-image 的宽高:调整主图片大小
    • .magnifier 的宽高:调整放大镜大小
    • .zoom-area 的宽高:调整放大区域大小
    • zoomRatio 变量:调整放大倍数

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

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

相关文章

3.A+B 问题三

用while(hasNext())来判断是非还有输入 后面用if判断结束循环的条件 break 结束循环; continue 跳过本次循环 进入下一次循环

save actions 设置

activate save actions on save – 在保存的时候激活save actions optimize imports – 自动删除没有引用的importsreformat file – 自动格式化代码add missing @Override – 在save actions激活的时候直接提添加overrideadd a serialVersionUID – 自动添加序列化id

同源策略SpringBoot允许跨域请求配置

完全允许(测试环境) import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotat…

【Vscode】用Vscode配置简约方便的Qt环境!

其实本文是在好不容易配好的情况下写成 故进食后人 Qt Creator的那个页面真的好丑 写完上学期大作业 这学期还要写的时候终于受不了了 而且各种报错什么的非常不好用 不知道是在干嘛 毕竟谁不想用舒服的字体 然后再配上麻衣学姐的背景和看板娘写代码呢?() 于是我开始探索怎么…

17.6K star!后端接口零代码的神器来了,腾讯开源的ORM库太强了!

"🏆 实时零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端定制返回 JSON 的数据和结构"嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法"🏆 实时零代码、全功能、强安全 ORM 库 🚀 后端接口和文…

WPF 和 Avalonia 开发者的 html css 前端指南 WrapPanel 篇

本文主要是向大家列出 WPF 和 Avalonia 的 WrapPanel 在 html 和 css 的实现方法。WPF 和 Avalonia 开发者的 html css 前端指南 WrapPanel 篇笔者前端框架使用的是 Vue3 + Deno。 笔者主要会以 Avalonia 作为 C# 技术部分的示例。 本文主要是向大家列出 WPF 和 Avalonia 的 Wr…

os管理文件和open创建文件

目录os基础操作获取当前工作目录更改工作目录列出目录内容创建目录删除目录、文件文件重命名路径拼接与拆分判断路径是否存在递归遍历目录open创建文件读取模式下写入模式下 os基础操作 获取当前工作目录 import os #返回的是一个绝对路径 print(f"当前的工作目录为:{os.…

【VMware VCF】VMware Cloud Foundation 5.2.1.1

如果你尝试访问 KB 52520 并跟踪 VMware Cloud Foundation 发行版本,可能会发现当前最新版本是 VMware Cloud Foundation 5.2.1。如果登录 SDDC Manager UI,导航到生命周期管理->发行版本,从这里查看 VCF 的版本也是同样如此(如下图所示)。但是,如果查看 VMware Cloud…

注意力机制流程图

知识是我们已知的也是我们未知的基于已有的知识之上我们去发现未知的由此,知识得到扩充我们获得的知识越多未知的知识就会更多因而,知识扩充永无止境

26-搭建审计迷你天猫商城python相关知识

1、搭建迷你天猫商城系统并复现log4j2 、fastjson命令执行、sql注入漏洞 搭建迷你天猫商城下载源码配置数据库(5.7.26)将数据库文件导入,,修改 application.properties中 的数据库账号密码 当数据库版本 > 5.7 时会报 GROUP BY 语句的错误,所以还需要修改 MySQL 5.7.26…

焊接保护气体自适应调节装置

机器人焊接节气这一术语,指的是在焊接作业流程中,借助特定的技术手段或专业装置,旨在有效缩减焊接气体的使用量,进而达成资源节约与成本控制的双重目标。这一技术精髓在于对焊接气体流量的智能化调控,使之与焊接电流形成精准匹配,从而杜绝气体的无谓损耗。焊接气体自适应…