下面是js实现详情页放大镜效果的完整攻略:
1. 确定效果
在实现之前,需要确定页面上的效果。详情页放大镜效果主要是将一张较大的图片放在固定的容器中,鼠标在小图上移动时,容器中的图片也会随着鼠标的移动而移动;同时,在容器的一侧会有一个放大的区域,显示鼠标所在的位置的更加放大的图片细节。
具体实现方式可以分为以下几个步骤:
- 定位小图和大图容器,计算出容器中图片的大小比例
- 给小图添加鼠标移动事件,计算鼠标在小图中的位置和在容器中图片的位置比例
- 使用计算出来的比例,设置大图容器中图片的位置,以及放大区域显示的位置
- 给容器添加滚动事件,保证鼠标移动到容器边缘时能够自动滚动
2. 代码实现
下面是一些简单实现的代码示例:
例子1:移动小图实现放大效果
<div class="container">
<img src="small.jpg" class="small-img" alt="small image">
<div class="big-img-container">
<img src="big.jpg" class="big-img" alt="big image">
</div>
</div>
.container {
position: relative;
}
.big-img-container {
position: absolute;
top: 0;
left: 0;
width: 400px; /* 容器大小 */
height: 400px;
overflow: hidden; /* 隐藏大图区域 */
}
.big-img {
width: 800px; /* 大图大小 */
height: 800px;
position: absolute;
top: 0;
left: 0;
transition: .3s ease-in-out; /* 设置过渡效果 */
transform: scale(2); /* 设置默认放大倍数 */
}
.small-img:hover + .big-img-container .big-img {
transform: scale(3); /* 放大倍数 */
}
这个例子通过放大和缩小大图的大小实现放大效果,不需要计算鼠标的位置。
例子2:移动鼠标实现放大效果
<div class="container">
<img src="small.jpg" class="small-img" alt="small image">
<div class="big-img-container">
<img src="big.jpg" class="big-img" alt="big image">
<div class="magnifier"></div>
</div>
</div>
.container {
position: relative;
}
.big-img-container {
position: absolute;
top: 0;
left: 0;
width: 400px; /* 容器大小 */
height: 400px;
overflow: hidden; /* 隐藏大图区域 */
}
.big-img {
width: 800px; /* 大图大小 */
height: 800px;
position: absolute;
top: 0;
left: 0;
}
.magnifier {
position: absolute;
top: 0;
left: 100%; /* 放大镜在大图容器右边 */
width: 200px; /* 放大区域大小 */
height: 200px;
background-color: rgba(0,0,0,0.2);
border-radius: 50%; /* 圆形 */
transform: translate(-50%, -50%); /* 居中 */
display: none; /* 初始隐藏 */
}
.small-img {
position: relative;
z-index: 1; /* 放大镜在小图之上 */
}
.small-img:hover {
opacity: .8; /* 鼠标移入时加半透明效果 */
}
.small-img:hover + .big-img-container .magnifier,
.small-img:hover + .big-img-container .big-img {
display: block; /* 鼠标移入时显示放大区域和大图 */
}
.small-img:hover + .big-img-container .big-img {
transform: scale(2); /* 默认放大2倍 */
}
.small-img:hover + .big-img-container .magnifier {
background-image: url("big.jpg"); /* 放大区域显示大图 */
background-size: 800px 800px; /* 放大区域按大图比例显示 */
}
.small-img:hover + .big-img-container:hover .magnifier {
cursor: move; /* 放大镜区域移动时变为十字形 */
}
.small-img:hover + .big-img-container:hover .magnifier:active {
cursor: grabbing; /* 按下放大镜区域时变为抓取形 */
}
.small-img:hover + .big-img-container:hover .magnifier:active .small-img + .big-img-container .big-img {
transform: scale(3); /* 鼠标移动时放大3倍 */
}
这个例子通过计算鼠标在小图和大图容器中的位置,实现了鼠标移动时大图进行相应的位移和放大效果,同时在一侧放置了一个放大镜区域,用于显示详细细节。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现详情页放大镜效果 - Python技术站