当前位置:首页 > JavaScript

js实现图片点击放大

2026-04-04 03:45:58JavaScript

实现图片点击放大功能

在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 = '&times;';

    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等:

  1. 引入库文件:

    <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>
  2. HTML标记:

    <a data-fancybox="gallery" href="large-image.jpg">
    <img src="small-image.jpg" alt="">
    </a>
  3. 初始化:

    $('[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%;
}

响应式图片放大

为确保在不同设备上都有良好体验,可以添加响应式处理:

js实现图片点击放大

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);

标签: 图片js
分享给朋友:

相关文章

css动画制作图片

css动画制作图片

CSS动画制作图片的方法 使用CSS动画可以为图片添加各种动态效果,提升网页的视觉吸引力。以下是几种常见的CSS动画实现方式: 关键帧动画(@keyframes) 通过定义关键帧来控制动画的各个阶段…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…