沃梦达 / IT编程 / 前端开发 / 正文

详解CSS3+JS完美实现放大镜模式

下面是详解“详解CSS3+JS完美实现放大镜模式”的完整攻略。

下面是详解“详解CSS3+JS完美实现放大镜模式”的完整攻略。

1. 确定需求

首先我们需要确立需要实现的需求:实现一个放大镜模式,当用户鼠标移动到小图上时,大图会显示相应的局部区域,使用户能够更清晰地看到细节。

2. 准备所需资源和环境

接下来,准备所需的资源和环境:

  • 一张小图和一张大图
  • HTML和CSS代码
  • JavaScript代码

3. HTML结构

在HTML文件中,需要创建以下结构:

<div class="container">
  <div class="img-small">
    <img src="small-image.jpg" alt="小图">
  </div>
  <div class="img-large">
    <img src="large-image.jpg" alt="大图">
  </div>
</div>

其中,.container用于包含整个放大镜模块;.img-small用于显示小图;.img-large用于显示大图。

4. CSS样式

接下来,在CSS文件中设置样式:

.container {
  position: relative;
}

.img-small {
  float: left;
  margin-right: 10px;
}

.img-small img {
  width: 200px;
  height: 200px;
  display: block;
}

.img-large {
  position: absolute;
  top: 0;
  left: 220px;
  overflow: hidden;
  width: 400px;
  height: 400px;
  opacity: 0;
  transition: opacity 0.3s ease-in-out;
}

.img-large img {
  position: absolute;
  top: 0;
  left: 0;
  max-width: none;
}

其中,.container使用相对定位;.img-small使用浮动并设置一个右边距;.img-small img设置小图的宽度、高度和块级显示。

.img-large使用绝对定位随时准备去移动;设置overflow属性为hidden以隐藏溢出内容;设置宽度和高度;设置初始透明度为0,然后添加CSS过渡效果随时准备动画;最后.img-large img使用相对定位,以左上角为参考点,最大宽度为none。

5. JS实现

然后,在JavaScript中添加代码:

const small = document.querySelector('.img-small');
const large = document.querySelector('.img-large');
const largeImg = document.querySelector('.img-large img');

small.addEventListener('mouseenter', () => {
  large.style.opacity = 1;
});

small.addEventListener('mouseleave', () => {
  large.style.opacity = 0;
});

small.addEventListener('mousemove', e => {
  const x = e.clientX - small.offsetLeft;
  const y = e.clientY - small.offsetTop;

  const ratioX = Math.round(x / small.clientWidth * 100);
  const ratioY = Math.round(y / small.clientHeight * 100);

  largeImg.style.left = `${-ratioX * 3}px`;
  largeImg.style.top = `${-ratioY * 3}px`;
});

首先,通过document.querySelector方法获取所需的元素。

然后,添加mouseenter事件监听器,当鼠标进入小图区域时,设置大图的初始透明度为1,使其显示。

添加mouseleave事件监听器,当鼠标离开小图区域时,设置大图的透明度为0,使其隐藏。

添加mousemove事件监听器,当鼠标在小图区域移动时,计算出鼠标相对小图的位置。根据相对位置计算出鼠标所指向的大图局部区域的位置,然后移动大图中的图片以显示指定的局部区域。

综上

通过上述HTML结构、CSS样式和JavaScript代码的设置,就可以完美实现一个放大镜模式。具体效果可以查看以下两个示例:

  • https://codepen.io/Lucy_Leung/pen/oQOJKL
  • https://codepen.io/SylvanasWindrunner/pen/oQEKGm

本文标题为:详解CSS3+JS完美实现放大镜模式