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

yizhihongxing

下面我将详细讲解如何通过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日

相关文章

  • layui禁用侧边导航栏点击事件的处理方法

    要禁用layui侧边导航栏点击事件,需要进行如下操作: 步骤一:添加代码 在需要禁用侧边导航栏点击事件的地方添加以下代码: $(".layui-nav-tree a").on("click", function(){ return false; }); 以上代码通过Jquery给导航栏内所有a标签添加了一个点击事件,返…

    css 2023年6月9日
    00
  • 兼容firefox,chrome的网页灰度效果

    实现网页灰度效果的方法一般有以下两种: 方法一:使用CSS3滤镜 CSS3提供了一种filter属性来实现图像的处理效果,其中的grayscale()函数可以将彩色图像转换为灰度图像。 以下是实现灰度效果的CSS代码: .grayscale { filter: grayscale(100%); -webkit-filter: grayscale(100%);…

    css 2023年6月11日
    00
  • 详解CSS(层叠样式表)渐进增强

    CSS(层叠样式表)是一种用于描述网页样式的语言,可以用于控制网页的布局、颜色、字体等方面。渐进增强是一种设计理念,即在设计网页时,应该先考虑基本功能的实现,然后再逐步增加高级功能。以下是关于详解CSS(层叠样式表)渐进增强的完整攻略。 步骤一:基本样式 首先,需要定义网页的基本样式,包括布局、颜色、字体等方面。以下是一个示例: body { font-fa…

    css 2023年5月18日
    00
  • bootstrap读书笔记之CSS组件(上)

    Bootstrap读书笔记之CSS组件(上) 什么是CSS组件 一套基于语义化的、可重用的、跨浏览器的HTML/CSS常规设计 不需要增加Javascript即可进行交互 用于语意化地描述UI元素的外观和行为 CSS组件的主要类 基础文本元素 h1~h6 p mark small del s ins u strong em 链接 a abbr address…

    css 2023年6月9日
    00
  • Bootstrap基本样式学习笔记之按钮(4)

    下面我将对“Bootstrap基本样式学习笔记之按钮(4)”这篇文章进行详细讲解。 标题 “Bootstrap基本样式学习笔记之按钮(4)” 前言 在这篇文章中,作者主要讲解了Bootstrap按钮组件的使用方法。Bootstrap是一款前端开发框架,而按钮是网站开发中不可或缺的组件之一。因此,学习Bootstrap的按钮组件对于想要学习前端开发的人来说是非…

    css 2023年6月11日
    00
  • CSS3 对过渡(transition)进行调速以及延时

    CSS3 提供了对过渡(transition)进行调速以及延时的功能,使元素的动画效果更加流畅和自然。在进行过渡调速以及延时时,需要借助两个 CSS 属性:transition-timing-function 和 transition-delay。 transition-timing-function transition-timing-function 用…

    css 2023年6月10日
    00
  • css实现div自动添加滚动条(图片或文字等超出时显示)

    CSS实现在div中显示超长内容后自动添加滚动条可以通过以下方式实现: 方法1:使用overflow属性 设置overflow属性为auto或scroll,当内容超出div的高度或宽度时,会自动添加滚动条。比如: div { width: 200px; height: 100px; overflow: auto; } 以上代码用于对200×100大小的div…

    css 2023年6月10日
    00
  • CSS3 translate导致字体模糊的实例代码

    下面是对“CSS3 translate导致字体模糊的实例代码”的完整攻略。 问题描述 在使用CSS3 translate动画的时候,我们有时会遇到字体模糊的问题。这是因为translate会改变元素的位置,而这个位置可能不是整数像素值,造成浏览器对字体渲染时模糊的现象。那么该如何解决这个问题呢? 解决方法 方法一:使用will-change属性 在CSS3中…

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