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

放大镜案例

一、Html的搭建

<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- 页面元信息及样式 -->
  </head>
  <body>
    <div class="camera">
      <!-- 小图 -->
      <div class="cameraImg">
        <img src="./img0.jpg" alt="" />
      </div>
      <!-- 放大镜 -->
      <div class="zoom"></div>
      <!-- 大图 -->
      <div class="bDiv">
        <img src="./img1.jpg" alt="" class="bImg" />
      </div>
    </div>
    <!-- 引入 js -->
    <script>
      // JavaScript 代码
    </script>
  </body>
</html>

二、对Html加入CSS页面样式进行页面渲染

 <style>
      * {
        margin: 0;
        padding: 0;
      }
      /* 小图 */
      .camera {
        width: 300px;
        height: 300px;
        position: relative;
        border: 1px solid black;
      }

      .cameraImg img {
        width: 300px;
        height: 300px;
      }
      /* 遮罩层 */
      .zoom {
        width: 100px;
        height: 100px;
        background-color: #ccc;
        opacity: 0.8;
        position: absolute;
        top: 0px;
        left: 0px;
        display: none;
      }
      /* 大图 */

      .bDiv {
        width: 500px;
        height: 500px;
        background-color: bisque;
        position: absolute;
        left: 350px;
        top: 0;
        overflow: hidden;
        display: none;
      }
      .bImg {
        position: absolute;
        top: 0;
        left: 0;
      }
</style>

三、加入JavaScript实现页面的交互效果

1、鼠标进入小图区域时显示遮罩层和大图区域;鼠标离开小图区域时隐藏遮罩层和大图区域。
//获取camera和zoom节点
let camera = document.querySelector('.camera');
let zoom = document.querySelector('.zoom');
//鼠标进入小图区域时显示遮罩层和大图区域
camera.onmouseenter=function(){
        zoom.style.display='block';
        bDiv.style.display='block';
      }
//鼠标离开小图区域时隐藏遮罩层和大图区域
camera.onmouseleave=function(){
        zoom.style.display='none';
        bDiv.style.display='none';
      }
2、鼠标在小图区域移动时更新遮罩层和大图的位置
 let bDiv = document.querySelector('.bDiv');
 let bImg = document.querySelector('.bImg');
//鼠标在 camera 元素内部移动的事件绑定
camera.onmousemove=function(event){

        //鼠标相对于浏览器窗口可视区域左上角的垂直和水平坐标
        let mouseY = event.clientY;
        let mouseX = event.clientX;

        //鼠标相对于 camera 元素的位置
        let zoomTop = camera.offsetTop;
        let zoomLeft = camera.offsetLeft;

        //zoom 元素(放大镜遮罩层)的宽度和高度
        let zoomW = zoom.offsetWidth;
        let zoomH = zoom.offsetHeight;

        //计算放大镜遮罩层的位置
        let zoomY = mouseY - zoomTop -zoomH / 2;
        let zoomX = mouseX - zoomLeft - zoomW / 2;
        // console.log(zoomX,zoomY);

        //限制放大镜遮罩层的移动范围
        if(zoomX >= 200){
          zoomX = 200;
        }
        if(zoomX <= 0){
          zoomX = 0;
        }
        if(zoomY >= 200){
          zoomY = 200;
        }
        if(zoomY <= 0){
          zoomY = 0;
        }

        //更新放大镜遮罩层的位置
        zoom.style.top = zoomY +'px';
        zoom.style.left = zoomX + 'px';

        //计算大图的移动距离
        let bImgWidth = bImg.offsetWidth - bDiv.offsetWidth;
        let bImgHeight = bImg.offsetHeight - bDiv.offsetHeight;
        let bImgTop = (zoomY / 200) * bImgHeight;
        let bImgLeft = (zoomX / 200) * bImgWidth;

        //更新大图的位置
        bImg.style.top = -bImgTop +'px';
        bImg.style.left = -bImgLeft + 'px';

相关文章:

  • 2025软件测试面试题200问(含答案+文档)
  • CSDN如何设置付费专栏
  • 微服务环境搭建架构介绍(附超清图解源代码)
  • 04-DevOps-安装并初始化Jenkins
  • Linux文件系统
  • 数字签名技术基础
  • 【MyBatis】#{} 与 ${} 的区别(常见面试题)
  • Vue.js 与 Ajax(Axios)的深入探索
  • 力扣——划分字母区间
  • 实验 Figma MCP + Cursor 联合工作流
  • (南京观海微电子)——码片与码元之间的关系
  • MATLAB中random函数用法
  • 功能全面的手机壁纸应用,种类齐全、众多高清壁纸
  • OpenHarmony包管理子系统
  • Linux lsblk 命令详解:查看磁盘和分区信息 (中英双语)
  • Spring Boot Validation 接口校验:从零到掌握
  • python中轻量级 LLM 应用开发框架 Promptic 如何有效进行对话管理?
  • AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构
  • 基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】
  • DPVS-1:编译安装DPVS (ubuntu22.04)
  • 气象干旱黄色预警继续:陕西西南部、河南西南部等地特旱
  • 中国海外发展:今年前4个月销售665.8亿元,花费305亿元拿地
  • 碧桂园境外债务重组:相当于现有公众票据本金额逾50%的持有人已加入协议
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯
  • A股三大股指低收:银行股再度走强,两市成交11920亿元
  • 胳膊一抬就疼,炒菜都成问题?警惕这种“炎症”找上门