当前位置:首页 > 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';
  });
}

响应式图片放大方案

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

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

相关文章

vue实现组件循环图片

vue实现组件循环图片

Vue 中实现组件循环图片的方法 在 Vue 中,可以通过 v-for 指令循环渲染图片组件。假设有一组图片数据需要循环展示,可以采用以下方式: 数据准备 在组件的 data 或 props 中定…

vue实现图片预览

vue实现图片预览

Vue 实现图片预览的方法 使用 Element UI 的 el-image 组件 Element UI 提供了 el-image 组件,支持图片预览功能。通过设置 preview-src-list…

vue实现图片循环

vue实现图片循环

实现图片循环的基本方法 在Vue中实现图片循环通常使用v-for指令结合数组数据。以下是基础实现方式: <template> <div> <img v-f…

js实现轮播

js实现轮播

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

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…