当前位置:首页 > 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
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Intersec…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现防洪

js实现防洪

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

vue实现放大图片

vue实现放大图片

实现图片放大功能的方法 在Vue中实现图片放大功能,可以通过多种方式实现。以下是几种常见的方法: 使用CSS transform属性 通过CSS的transform: scale()属性实现图片放…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './imag…