js实现放大镜效果的思路与代码

下面我将详细讲解如何通过JavaScript实现放大镜效果。

思路分析

实现放大镜效果的思路相对简单,主要包含以下几个步骤:

  1. 通过HTML和CSS创建出整体布局,包括放大镜盒子、原图和放大后的图片等元素。
  2. 监听原图的鼠标移动事件,并获取鼠标当前的坐标。
  3. 根据鼠标坐标计算出放大镜盒子的位置,并将放大后的图片的位置相应更新。
  4. 在移动时,保证鼠标不能超出原图的范围,同时放大后的图片需要保持在放大镜盒子的范围内。

代码示例一

下面我将给出第一个示例代码,实现在一个图片上面移动鼠标时,显示放大后的图片。该代码假设放大后的图片已经存在,代码包含HTML、CSS和JavaScript部分。

HTML代码

<div class="image-container">
  <img src="image.jpg" alt="图片" class="origin-image">
  <div class="magnifier-box"></div>
</div>

CSS代码

.image-container {
  position: relative;
}

.origin-image {
  width: 500px;
  height: 500px;
}

.magnifier-box {
  position: absolute;
  top: 0;
  left: 0;
  width: 200px;
  height: 200px;
  border: 1px solid #ccc;
  opacity: 0.5;
  pointer-events: none;
}

JavaScript代码

const originImg = document.querySelector('.origin-image');
const magnifierBox = document.querySelector('.magnifier-box');

originImg.addEventListener('mousemove', e => {
  // 获取鼠标相对于图片的位置
  const mouseX = e.pageX - originImg.getBoundingClientRect().left;
  const mouseY = e.pageY - originImg.getBoundingClientRect().top;

  // 移动放大镜盒子
  magnifierBox.style.left = `${mouseX - magnifierBox.offsetWidth / 2}px`;
  magnifierBox.style.top = `${mouseY - magnifierBox.offsetHeight / 2}px`;

  // 移动放大后的图片
  const offsetX = -(mouseX * 2 - magnifierBox.offsetWidth) / 2;
  const offsetY = -(mouseY * 2 - magnifierBox.offsetHeight) / 2;
  originImg.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
});

代码示例二

下面我将给出第二个示例代码,实现在一个图集上面移动鼠标时,显示对应的放大后的图片。该代码假设放大后的图片是动态生成的,代码包含HTML、CSS和JavaScript部分。

HTML代码

<div class="image-container">
  <div class="thumbnails">
    <img src="image1-thumb.jpg" alt="图片1" data-img-url="image1.jpg">
    <img src="image2-thumb.jpg" alt="图片2" data-img-url="image2.jpg">
    <img src="image3-thumb.jpg" alt="图片3" data-img-url="image3.jpg">
  </div>
  <div class="origin-image-container">
    <img src="" alt="放大后的图片" class="origin-image">
    <div class="magnifier-box"></div>
  </div>
</div>

CSS代码

.image-container {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}

.thumbnails {
  display: flex;
  margin-right: 20px;
}

.thumbnails img {
  width: 100px;
  height: 100px;
  margin-right: 10px;
  cursor: pointer;
}

.origin-image-container {
  position: relative;
}

.origin-image {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  transition: opacity 0.3s;
}

.magnifier-box {
  position: absolute;
  top: 0;
  left: 0;
  width: 200px;
  height: 200px;
  border: 1px solid #ccc;
  opacity: 0.5;
  pointer-events: none;
}

JavaScript代码

const thumbnails = document.querySelectorAll('.thumbnails img');
const originImg = document.querySelector('.origin-image');
const magnifierBox = document.querySelector('.magnifier-box');

thumbnails.forEach(thumbnail => {
  thumbnail.addEventListener('mousemove', e => {
    // 获取对应图片的放大后的地址
    const imgUrl = e.target.dataset.imgUrl;

    // 动态生成放大后的图片
    originImg.src = imgUrl;

    // 获取鼠标相对于缩略图的位置
    const mouseX = e.pageX - thumbnail.getBoundingClientRect().left;
    const mouseY = e.pageY - thumbnail.getBoundingClientRect().top;

    // 设置放大镜盒子的位置
    magnifierBox.style.left = `${mouseX - magnifierBox.offsetWidth / 2}px`;
    magnifierBox.style.top = `${mouseY - magnifierBox.offsetHeight / 2}px`;

    // 设置放大后的图片的位置
    const originImgWidth = originImg.offsetWidth;
    const originImgHeight = originImg.offsetHeight;
    const offsetX = -(mouseX * 2 - magnifierBox.offsetWidth) / 2;
    const offsetY = -(mouseY * 2 - magnifierBox.offsetHeight) / 2;
    originImg.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
    originImg.style.maxWidth = `${originImgWidth}px`;
    originImg.style.maxHeight = `${originImgHeight}px`;
    originImg.style.opacity = '1';
  });

  thumbnail.addEventListener('mouseleave', e => {
    // 鼠标离开恢复初始状态
    originImg.style.opacity = '0';
  });
});

总结

以上就是通过JavaScript实现放大镜效果的完整攻略。希望能对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现放大镜效果的思路与代码 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS实现预加载视频音频/视频获取截图(返回canvas截图)

    下面是“JS实现预加载视频音频/视频获取截图(返回canvas截图)”的完整攻略。 一、准备工作 首先要在HTML文件中引入jQuery和video.js库: <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></scri…

    css 2023年6月10日
    00
  • 原生js与jQuery实现简单的tab切换特效对比

    实现简单的tab切换特效是前端开发中比较基础和常见的功能之一。使用原生JS和jQuery都可以实现该功能,下面详细讲解原生JS和jQuery分别实现该功能的过程: 原生JS实现tab切换 HTML代码 先给出HTML代码,我们的tab切换控制对象为按钮(btn类名),tab内容为tc内容的div元素: <div class="tabs&quo…

    css 2023年6月10日
    00
  • IE系列不支持CSS的圆角border-radius等属性的解决方案

    针对IE系列不支持CSS的圆角border-radius等属性的问题,我们可以采用以下几种解决方案: 解决方案一:使用IE滤镜 IE系列浏览器支持通过滤镜来实现圆角效果。具体实现方式如下: /* 设置圆角滤镜 */ div { border-radius: 10px; /* 优雅降级,对于支持 border-radius 属性的浏览器,直接设置圆角 */ f…

    css 2023年6月10日
    00
  • 纯css3实现图片翻牌特效

    我来详细解释一下如何用纯CSS3实现图片翻牌特效。 准备工作 在开始之前,我们需要准备一些基本的素材。首先,我们需要两张图片,分别表示正面和反面。然后,我们需要准备一个带有容器的HTML文件,例如: <div class="flip-card"> <div class="flip-card-inner&quot…

    css 2023年6月11日
    00
  • 原生JS实现汇率转换功能代码实例

    下面我将详细讲解“原生JS实现汇率转换功能代码实例”的完整攻略。 一、前置知识 在学习原生JS实现汇率转换功能代码实例之前,需要掌握以下前置知识: HTML基础 CSS基础 JavaScript基础(包括DOM操作、事件绑定等) 如果掌握了以上基础知识,那么就可以进入具体的代码实现了。 二、HTML结构 在实现汇率转换功能之前,我们需要先搭建页面结构。页面结…

    css 2023年6月10日
    00
  • 解决vue-cli3创建使用iview定制主题javascriptEnabled找不到该配置项

    当使用vue-cli3创建项目并使用iview做UI组件库时,可能会遇到找不到javascriptEnabled配置项的问题,这是因为javascriptEnabled是Less-loader的配置项,而iview使用的是Less的定制主题。 为了解决该问题,需要在项目根目录下创建vue.config.js文件,在该文件中配置Less-loader的java…

    css 2023年6月9日
    00
  • html中ul和li标签的用法详解

    HTML中的ul和li标签通常用于创建无序列表,以下是使用ul和li标签创建无序列表的基本步骤: 创建ul标签,ul标签表示无序列表。 <ul> <!– 在这里添加列表项 –> </ul> 在ul标签内部添加li标签,li标签表示列表项。 <ul> <li>列表项1</li> &lt…

    css 2023年6月10日
    00
  • padding与line-height的区别

    当涉及到调整页面元素在文档流中的位置时,CSS中的padding和line-height都会起到一定的作用。但这两者之间有一些区别,下面我将从多个方面进行详细的讲解。 padding与line-height的定义 padding:一个元素四周的填充值。这是一个CSS盒模型中计算的属性,它决定了元素的边框与元素内容之间的距离。 line-height:行高属性…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部