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日

相关文章

  • 实现css文字垂直居中的8种方法

    下面是“实现css文字垂直居中的8种方法”的完整攻略。 方法1:使用line-height属性 .container { height: 200px; line-height: 200px; } 这种方法适用于单行文字的垂直居中。通过将容器的line-height设置为容器的高度,文字就会垂直居中。 示例1: <div class="cont…

    css 2023年6月9日
    00
  • 详解如何自定义CSS滚动条的样式

    自定义 CSS 滚动条样式是前端开发中常用的技巧之一,可以用于美化网页滚动条的外观。以下是关于如何自定义 CSS 滚动条样式的完整攻略。 步骤一:创建 HTML 结构 首先,需要在 HTML 文件中创建一个容器元素,用于包含需要自定义滚动条的内容。以下是一个示例: <div class="scrollbar"> <div…

    css 2023年5月18日
    00
  • CSS清除浮动方法小结

    好的。CSS清除浮动方法是为解决浮动元素造成的布局混乱而设定的。接下来我会详细讲解这个主题,包含清除浮动的原理、清除浮动的方法、以及两个示例说明。 清除浮动的原理 在HTML中,使用浮动元素可以实现页面的多列布局、文字环绕图片等效果,但是当浮动元素脱离文档流后,可能会对后续元素造成影响,导致页面布局出现问题。这时候清除浮动就可以解决问题。 清除浮动的原理是让…

    css 2023年6月10日
    00
  • 表格边框以虚线显示的css样式

    要让表格边框以虚线显示,可以通过CSS样式进行控制。 一种方式是通过设置border-style属性为dashed或者dotted来使表格边框呈现虚线的样式,同时设置border-width属性来控制边框宽度,示例如下: table { border-collapse: collapse; } td, th { border: 1px dashed #ccc…

    css 2023年6月10日
    00
  • CSS实现渐变色边框(Gradient borders)的5种方法

    CSS实现渐变色边框,可以通过以下5种方法来实现: 1. 使用background-image和linear-gradient创建渐变边框 使用background-image和linear-gradient来创建渐变边框,可以先为元素设置一个透明的border属性,然后为元素的背景设置渐变背景,从而实现渐变边框。 .gradient-border { bo…

    css 2023年6月9日
    00
  • CSS3系列教程:背景图片(背景大小和多背景图) 应用说明

    下面是针对“CSS3系列教程:背景图片(背景大小和多背景图) 应用说明”的完整攻略。 1. 背景图片的应用说明 在网页开发中,背景图片是很重要的一部分,可以为网页增加美感和视觉效果。CSS3不仅提供了多种背景图片的设置方式,还提供了更多的背景属性可以设置。 1.1 背景图片的设置方式 设置背景图片可以通过以下的CSS属性: background-image:…

    css 2023年6月9日
    00
  • 一文了解Flask框架

    Flask是一款基于Python语言的轻量级Web框架,它的设计目标是简单易用、高效灵活。其核心实现只有约3000行代码,但却支持RESTful请求、Jinja2模板引擎、Werkzeug工具箱等众多功能,适合用于构建小型Web应用、快速原型开发等领域。 Flask框架的核心思想是WSGI(Web Server Gateway Interface),即Web…

    2023年3月13日
    00
  • jquery实现弹出窗口效果的实例代码

    以下是讲解 “jquery实现弹出窗口效果的实例代码” 的完整攻略。 简介 在网页开发中,弹出窗口效果的运用非常广泛,可以用于展示提示信息、显示图片、功能聚合等场景。而jquery是一款网页开发框架,通过它可以方便地实现弹出窗口效果。 实现步骤 步骤一:引入jquery 在文档头部的 <head> 标签内引用jquery库,示例代码如下: &lt…

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