欢迎访问宙启技术站
智能推送

js怎么实现简单放大镜效果

发布时间:2023-05-16 09:53:46

JavaScript可以很方便地实现简单放大镜效果,具体步骤如下:

1. HTML结构

首先,我们需要在HTML文件中定义一个图片容器和一个放大镜容器,如下所示:

<div class="image-container">
	<img src="https://picsum.photos/id/237/500/500" alt="image" />
	<div class="zoom-container"></div>
</div>

其中,image-container是图片容器,zoom-container是放大镜容器。

2. CSS样式

接下来,我们需要添加一些CSS样式来设置图片和放大镜的基础样式,如下所示:

.image-container {
	position: relative;
}

.image-container img {
	width: 100%;
	display: block;
}

.zoom-container {
	position: absolute;
	top: 0;
	left: 0;
	width: 200px;
	height: 200px;
	background-color: rgba(255, 255, 255, 0.7);
	border: 2px solid #ccc;
	border-radius: 50%;
	visibility: hidden;
}

其中,image-container的position属性需要设置为relative,而zoom-container的position属性需要设置为absolute,并且宽、高、背景色、边框等都需要设置。同时,为了让放大镜一开始不可见,我们需要将它的visibility属性设置为hidden。

3. JavaScript代码

最后,我们需要编写一些JavaScript代码来控制放大镜的显示和位置,以及实现放大镜的放大效果。

// 获取DOM元素
const imageContainer = document.querySelector(".image-container");
const zoomContainer = document.querySelector(".zoom-container");
const image = imageContainer.querySelector("img");

// 为图片容器添加鼠标移入事件
imageContainer.addEventListener("mouseenter", () => {
	zoomContainer.style.visibility = "visible";  // 显示放大镜
});

// 为图片容器添加鼠标移出事件
imageContainer.addEventListener("mouseleave", () => {
	zoomContainer.style.visibility = "hidden";  // 隐藏放大镜
});

// 为图片容器添加鼠标移动事件
imageContainer.addEventListener("mousemove", (event) => {
	const mouseX = event.pageX - imageContainer.offsetLeft;  // 鼠标距离图片容器左边缘的距离
	const mouseY = event.pageY - imageContainer.offsetTop;  // 鼠标距离图片容器上边缘的距离
	const zoomX = mouseX / imageContainer.clientWidth * zoomContainer.offsetWidth;  // 放大镜距离图片容器左边缘的距离
	const zoomY = mouseY / imageContainer.clientHeight * zoomContainer.offsetHeight;  // 放大镜距离图片容器上边缘的距离

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

	// 设置图片的位置
	image.style.left = -${zoomX}px;
	image.style.top = -${zoomY}px;
});

代码解释:

- 首先,我们使用querySelector获取到图片容器、放大镜容器和图片元素。

- 接下来,我们为图片容器添加了三个鼠标事件:mouseenter、mouseleave和mousemove。分别表示鼠标进入、离开和移动到图片容器上时的操作。

- 在mouseenter事件中,我们将放大镜的visibility属性设置为visible,使其显示出来。

- 在mouseleave事件中,我们将放大镜的visibility属性设置为hidden,使其隐藏起来。

- 在mousemove事件中,我们计算出鼠标的位置和放大镜的位置,并设置放大镜和图片的位置。具体的计算方式可以看代码注释。

到此为止,一个简单的放大镜效果就完成了。当鼠标移动到图片上时,会出现一个放大镜,并且鼠标在放大镜内部移动时,图片也会相应地跟着移动和放大。效果如下图所示:

![放大镜效果演示](https://img-blog.csdnimg.cn/20211210140255815.gif)