当前位置:首页 > JavaScript

js 实现图片 放大

2026-01-16 12:03:06JavaScript

使用 CSS transform 实现图片放大

通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态:

const img = document.querySelector('img');
img.addEventListener('mouseenter', () => {
  img.style.transform = 'scale(1.2)';
  img.style.transition = 'transform 0.3s ease';
});
img.addEventListener('mouseleave', () => {
  img.style.transform = 'scale(1)';
});

使用 Lightbox 库实现模态框放大

引入成熟的 Lightbox 库如 lightgallery.js 可以实现专业级的图片放大展示:

js 实现图片 放大

// 安装后引入
import lightGallery from 'lightgallery';

document.addEventListener('DOMContentLoaded', () => {
  lightGallery(document.getElementById('gallery-container'));
});

原生 JavaScript 实现点击放大

通过动态创建 overlay 元素实现全屏放大效果:

js 实现图片 放大

document.querySelectorAll('.zoomable-img').forEach(img => {
  img.onclick = function() {
    const overlay = document.createElement('div');
    overlay.style.position = 'fixed';
    overlay.style.top = '0';
    overlay.style.left = '0';
    overlay.style.width = '100vw';
    overlay.style.height = '100vh';
    overlay.style.backgroundColor = 'rgba(0,0,0,0.8)';
    overlay.style.zIndex = '1000';
    overlay.style.display = 'flex';
    overlay.style.justifyContent = 'center';
    overlay.style.alignItems = 'center';

    const clonedImg = this.cloneNode();
    clonedImg.style.maxHeight = '90vh';
    clonedImg.style.maxWidth = '90vw';

    overlay.appendChild(clonedImg);
    overlay.onclick = () => document.body.removeChild(overlay);

    document.body.appendChild(overlay);
  };
});

使用 Canvas 实现像素级放大

对于需要显示放大细节的场景,可以通过 Canvas 实现局部放大镜效果:

function createMagnifier(img, zoomLevel = 2) {
  const canvas = document.createElement('canvas');
  canvas.width = 200;
  canvas.height = 200;
  canvas.style.position = 'absolute';
  canvas.style.border = '1px solid #000';
  canvas.style.display = 'none';

  img.parentNode.appendChild(canvas);

  img.addEventListener('mousemove', (e) => {
    canvas.style.display = 'block';
    canvas.style.left = `${e.pageX + 10}px`;
    canvas.style.top = `${e.pageY + 10}px`;

    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(
      img,
      e.offsetX - canvas.width/(2*zoomLevel),
      e.offsetY - canvas.height/(2*zoomLevel),
      canvas.width/zoomLevel,
      canvas.height/zoomLevel,
      0,
      0,
      canvas.width,
      canvas.height
    );
  });

  img.addEventListener('mouseout', () => {
    canvas.style.display = 'none';
  });
}

响应式图片放大方案

针对不同设备实现响应式放大处理:

function responsiveZoom(imgElement) {
  const isMobile = window.matchMedia('(max-width: 768px)').matches;
  const scaleValue = isMobile ? 1.5 : 2;

  imgElement.addEventListener('click', () => {
    if(imgElement.classList.contains('zoomed')) {
      imgElement.style.transform = 'scale(1)';
    } else {
      imgElement.style.transform = `scale(${scaleValue})`;
    }
    imgElement.classList.toggle('zoomed');
  });
}

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

相关文章

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现图片加载

js实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…

js实现div隐藏

js实现div隐藏

使用CSS的display属性隐藏div 通过设置元素的display属性为none,可以完全隐藏div元素。这种方法不仅隐藏元素,还会从文档流中移除,不占据页面空间。 document.getEl…