下面是详解“详解CSS3+JS完美实现放大镜模式”的完整攻略。
首先我们需要确立需要实现的需求:实现一个放大镜模式,当用户鼠标移动到小图上时,大图会显示相应的局部区域,使用户能够更清晰地看到细节。
接下来,准备所需的资源和环境:
在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
用于显示大图。
接下来,在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。
然后,在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代码的设置,就可以完美实现一个放大镜模式。具体效果可以查看以下两个示例:
本文链接:http://task.lmcjl.com/news/15765.html