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

相关文章

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…