当前位置:首页 > 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 可以实现专业级的图片放大展示:

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

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

原生 JavaScript 实现点击放大

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

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

响应式图片放大方案

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

js 实现图片 放大

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
分享给朋友:

相关文章

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现论坛

js实现论坛

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

h5实现图片压缩

h5实现图片压缩

使用Canvas API压缩图片 HTML5的Canvas API可以通过调整画布尺寸和图像质量来实现图片压缩。创建一个Canvas元素,将图片绘制到Canvas上,再通过toDataURL或toBl…