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日

相关文章

  • Bootstrap免费字体和图标网站(值得收藏)

    Bootstrap是一款常用的前端开发框架,它提供了丰富的UI组件和功能,用于快速搭建美观且响应式的网站。但是,其中的字体和图标资源需要外部链接或下载,这会增加我们的耗时和工作量。 为了解决这个问题,Bootstrap官方提供了一份免费的字体和图标资源,它们可以直接在项目中使用,且不需要链接或下载。这份资源可通过Bootstrap免费字体和图标网站进行获取。…

    css 2023年6月9日
    00
  • 使用css实现圆形波浪效果图

    下面是使用CSS实现圆形波浪效果图的完整攻略。 1. 确定HTML结构 首先,我们需要在HTML代码中添加一个圆形容器。可以使用<div>标签,并通过CSS设置其宽度和高度相等,让其呈现为圆形。例如: <div class="circle"></div> .circle { width: 200px; …

    css 2023年6月10日
    00
  • 瀑布流布局的两种实现方式:传统多列浮动和绝对定位布局

    瀑布流布局常用于图片展示等卡片式布局,实现方式主要有两种:传统多列浮动和绝对定位布局。 传统多列浮动方式 在 HTML 结构中创建多个元素,并为每个元素设置相同的 class,然后使用 CSS 样式进行布局。 HTML 结构示例: <div class="waterfall"> <div class="colu…

    css 2023年6月10日
    00
  • Web前端开发规范文档(css/javascript)

    作为网站的作者,编写Web前端开发规范文档(css/javascript)非常重要。下面,我将详细讲解如何编写这样一个文档。 一、规范概述 在编写Web前端开发规范文档(css/javascript)时,首先需要对规范进行概述。这部分内容主要包括: 规范的目的:明确规范的编写目的,例如统一代码规范、提高代码可读性、方便团队协作等。 规范的范围:明确规范的应用…

    css 2023年6月9日
    00
  • CSS实现隐藏滚动条并可以滚动内容效果(三种方式)

    下面我将详细介绍三种CSS实现隐藏滚动条并可以滚动内容的方法。 方法一:使用 overflow 属性 使用 overflow:hidden 属性可以隐藏滚动条,使用 overflow:auto 属性可以在内容溢出时显示滚动条。这种方法适用于需要隐藏所有滚动条的情况。示例代码如下: .container { overflow: hidden; /* 隐藏滚动条…

    css 2023年6月10日
    00
  • CSS3圆角和渐变2种常用功能详解

    CSS3圆角和渐变2种常用功能详解 CSS3圆角 CSS3中新增加了一个非常实用的功能——圆角(border-radius)。这个功能使得开发人员可以轻松地实现圆角效果的按钮和图片等效果。以下是如何使用CSS3圆角的方法: 语法 border-radius: 10px; 上面的例子是给元素的四个角设置了半径为10像素的圆角。如果想要给其中某个角设置圆角,可以…

    css 2023年6月9日
    00
  • css如何实现自定义更为美观的链接提示效果

    CSS 如何实现自定义更为美观的链接提示效果? 在 CSS 中,可以使用伪类选择器 :hover 来实现自定义更为美观的链接提示效果。以下是关于如何实现自定义更为美观的链接提示效果的完整攻略: 方法一:使用 :hover 伪类选择器 使用 :hover 伪类选择器是一种常见的实现链接提示效果的方法。以下是一个示例: a:hover { color: red;…

    css 2023年5月18日
    00
  • div+css布局中选择使用html标签的方法

    在div+css布局中,选择使用HTML标签的方法,可以通过以下步骤实现: 定义HTML结构 首先,在HTML结构中,需要定义好所需的顶级div元素,并赋予其想要的布局特性,如width、height、position、display等。其次,在这个top-level div中,我们可以使用多个内嵌的div标签,来组合成想要的布局形式。 利用CSS样式进行布…

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