介绍jquery图片放大镜效果需要的技术有HTML,CSS,jQuery,下面是详细的攻略:
介绍jquery图片放大镜效果需要的技术有HTML,CSS,jQuery,下面是详细的攻略:
一、HTML结构
首先我们需要一个图片容器,还有一个放大镜容器,下面是示例HTML代码:
<div class="zoom-box">
<img class="small-img" src="path/to/small/image">
<div class="magnify-box"></div>
</div>
二、CSS样式
接下来,我们需要为这两个容器设置样式。下面是示例CSS代码:
.zoom-box {
position: relative;
overflow: hidden;
width: 400px;
height: 400px;
}
.small-img {
display: block;
max-width: 100%;
height: auto;
}
.magnify-box {
position: absolute;
top: 0;
left: 0;
width: 200px;
height: 200px;
background: rgba(0, 0, 0, 0.2); /* 背景透明度为0.2 */
border: 2px solid #fff; /* 边框为白色 */
border-radius: 50%; /* 圆形边框 */
box-shadow: 0 0 20px 5px rgba(0, 0, 0, 0.5); /* 阴影效果 */
display: none;
cursor: pointer; /* 设置光标为手型 */
}
三、jQuery效果
一旦我们有了HTML和CSS,我们就可以开始使用jQuery来实现放大效果了。首先,我们需要添加以下代码:
$('.zoom-box').mousemove(function(e) {
// ...
});
$('.zoom-box').hover(function(){
// ...
});
这段代码用来检测鼠标移动以及光标悬停在图片上。在mousemove事件中,我们要计算相对于小图的位置,并在放大容器上设置背景图。我们可以使用以下代码:
var smallImg = $(this).find('.small-img');
var magnifyBox = $(this).find('.magnify-box');
var offsetX = e.pageX - smallImg.offset().left;
var offsetY = e.pageY - smallImg.offset().top;
var zoomX = offsetX / smallImg.width() * magnifyBox.width();
var zoomY = offsetY / smallImg.height() * magnifyBox.height();
magnifyBox.css('background-position', '-' + zoomX + 'px -' + zoomY + 'px');
在hover事件中,我们要隐藏或显示放大容器。我们可以使用以下代码:
magnifyBox.fadeToggle();
这样就完成了放大镜效果的实现,下面是完整的jQuery代码:
$('.zoom-box').mousemove(function(e) {
var smallImg = $(this).find('.small-img');
var magnifyBox = $(this).find('.magnify-box');
var offsetX = e.pageX - smallImg.offset().left;
var offsetY = e.pageY - smallImg.offset().top;
var zoomX = offsetX / smallImg.width() * magnifyBox.width();
var zoomY = offsetY / smallImg.height() * magnifyBox.height();
magnifyBox.css('background-position', '-' + zoomX + 'px -' + zoomY + 'px');
});
$('.zoom-box').hover(function(){
var magnifyBox = $(this).find('.magnify-box');
magnifyBox.fadeToggle();
});
四、示例说明
- 简单效果
我们可以先实现一个简单的放大镜效果,下面是示例效果:
点击查看简单效果
实现这个效果的代码和前面的代码非常相似,只是需要调整一下放大容器的大小和位置。
- 带缩略图效果
我们还可以实现一个更加完整的放大镜效果,这个效果带有一个缩略图。缩略图在页面上不显示,只有在放大镜效果显示后才会随着鼠标移动而实时更新。下面是示例效果:
点击查看带缩略图效果
实现这个效果需要增加一些HTML和CSS代码,下面是示例代码:
<div class="zoom-box">
<img class="small-img" src="path/to/small/image">
<div class="magnify-box"></div>
</div>
<div class="thumbnail-box">
<img class="thumbnail-img" src="path/to/small/image">
</div>
.thumbnail-box {
margin-top: 30px;
text-align: center;
}
.thumbnail-img {
display: inline-block;
width: 80px;
height: 80px;
border: 2px solid #eee;
border-radius: 50%;
margin-right: 10px;
cursor: pointer;
}
这里我们添加了一个缩略图容器,在页面上不显示。缩略图容器中包含一个缩略图,我们需要根据缩略图的位置计算放大镜效果的位置和大小。
下面是完整的jQuery代码:
$('.thumbnail-img').mousemove(function(e){
var bigImg = $('.big-img');
var zoomX = (e.pageX - $(this).offset().left)/$(this).width()*bigImg.width();
var zoomY = (e.pageY - $(this).offset().top)/$(this).height()*bigImg.height();
bigImg.css('background-position', '-' + zoomX + 'px -' + zoomY + 'px');
});
$('.thumbnail-img').mouseenter(function(e) {
$('.big-box').fadeToggle();
});
$('.thumbnail-img').mouseleave(function(e) {
$('.big-box').fadeToggle();
});
$('.thumbnail-img').click(function(e) {
var smallImg = $('.small-img');
var bigImg = $('.big-img');
var magnifyBox = $('.magnify-box');
var thumbnailImg = $(this);
var thumbnailBox = $('.thumbnail-box');
var magnifyOffsetY = 20;
smallImg.attr('src', thumbnailImg.attr('src'));
bigImg.css('background-image', 'url("' + thumbnailImg.attr('src').replace('/small/', '/big/') + '")');
var magnifyBoxWidth = thumbnailBox.width()*smallImg.width()/bigImg.width();
var magnifyBoxHeight = thumbnailBox.height()*smallImg.height()/bigImg.height();
magnifyBox.css('width', magnifyBoxWidth + 'px');
magnifyBox.css('height', magnifyBoxHeight + 'px');
magnifyBox.css('top', magnifyOffsetY + 'px');
magnifyBox.css('left', (thumbnailImg.offset().left - thumbnailBox.offset().left - magnifyBox.width()/2) + 'px');
var offsetX = e.pageX - thumbnailImg.offset().left;
var offsetY = e.pageY - thumbnailImg.offset().top;
var zoomX = Math.min(magnifyBoxWidth/2, Math.max(offsetX, magnifyBoxWidth/2));
var zoomY = Math.min(magnifyBoxHeight/2, Math.max(offsetY + magnifyOffsetY, magnifyBoxHeight/2));
magnifyBox.css('background-position', '-' + (zoomX - magnifyBoxWidth/2) + 'px -' + (zoomY - magnifyBoxHeight/2) + 'px');
return false;
});
在这个示例中,我们使用了一些新的技术,例如:fadeToggle方法和attr方法。同时我们需要动态计算放大镜的大小和位置,保证这个效果可以适用于各种大小的图片和缩略图。
这就是完整的jquery图片放大镜效果的攻略了,希望能帮助到你。
本文标题为:jquery图片放大镜效果
- HTML基础详解(上) 2022-09-21
- vue修改项目title 2023-10-08
- html网页中使用希腊字母的方法 2022-09-21
- CSS实现移动端横向滚动导航条(PC端也适用) 2023-12-14
- vue+springboot实现分页 2023-10-08
- Vue Router(一) 2023-10-08
- 基于Ajax技术实现考试倒计时并自动提交试卷 2023-01-20
- AJAX请求是否真的不安全?谈一谈Web安全与AJAX的关系 2023-02-15
- Ajax邮箱、用户名唯一性验证实例代码 2023-02-14
- AJax 把拿到的后台数据在页面中渲染的实例 2023-02-23