js实现图片点击放大
实现图片点击放大功能
在JavaScript中实现图片点击放大功能可以通过监听图片的点击事件,动态创建一个遮罩层和大图展示区域。以下是具体实现方法:
HTML部分
<img src="small-image.jpg" class="clickable-image" alt="示例图片">
CSS部分
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.9);
}
.modal-content {
display: block;
max-width: 90%;
max-height: 90%;
margin: auto;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.close {
position: absolute;
top: 15px;
right: 35px;
color: #f1f1f1;
font-size: 40px;
font-weight: bold;
cursor: pointer;
}
JavaScript部分
document.querySelectorAll('.clickable-image').forEach(img => {
img.addEventListener('click', function() {
const modal = document.createElement('div');
modal.className = 'modal';
const modalImg = document.createElement('img');
modalImg.className = 'modal-content';
modalImg.src = this.src;
const closeSpan = document.createElement('span');
closeSpan.className = 'close';
closeSpan.innerHTML = '×';
modal.appendChild(closeSpan);
modal.appendChild(modalImg);
document.body.appendChild(modal);
modal.style.display = 'block';
closeSpan.onclick = function() {
modal.remove();
};
modal.onclick = function(e) {
if (e.target === modal) {
modal.remove();
}
};
});
});
使用第三方库简化实现
对于更复杂的需求,可以使用第三方库如Lightbox、Fancybox等:
-
引入库文件:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js"></script> -
HTML标记:
<a data-fancybox="gallery" href="large-image.jpg"> <img src="small-image.jpg" alt=""> </a> -
初始化:
$('[data-fancybox]').fancybox();
纯CSS实现方案
对于简单场景,可以使用CSS的:target伪类实现:
<a href="#img1">
<img src="small-image.jpg" alt="点击放大">
</a>
<div id="img1" class="lightbox">
<a href="#_" class="close">×</a>
<img src="large-image.jpg">
</div>
.lightbox {
display: none;
position: fixed;
z-index: 999;
width: 100%;
height: 100%;
text-align: center;
top: 0;
left: 0;
background: rgba(0,0,0,0.8);
}
.lightbox:target {
display: block;
}
.lightbox img {
max-width: 90%;
max-height: 80%;
margin-top: 5%;
}
.close {
color: white;
font-size: 2em;
text-decoration: none;
position: absolute;
right: 5%;
top: 2%;
}
响应式图片放大
为确保在不同设备上都有良好体验,可以添加响应式处理:

function adjustModalSize() {
const modalImg = document.querySelector('.modal-content');
const windowWidth = window.innerWidth;
const windowHeight = window.innerHeight;
if (windowWidth < 768) {
modalImg.style.maxWidth = '95%';
modalImg.style.maxHeight = '70%';
} else {
modalImg.style.maxWidth = '80%';
modalImg.style.maxHeight = '85%';
}
}
window.addEventListener('resize', adjustModalSize);






