当前位置:首页 > JavaScript

js实现图片放大缩小

2026-02-28 18:08:01JavaScript

使用 CSS transform 实现缩放

通过修改 CSS 的 transform 属性实现图片缩放效果。这种方式性能较好,不会引起页面重排。

const img = document.getElementById('zoom-image');
let scale = 1;

function zoomIn() {
  scale += 0.1;
  img.style.transform = `scale(${scale})`;
}

function zoomOut() {
  if (scale > 0.1) {
    scale -= 0.1;
    img.style.transform = `scale(${scale})`;
  }
}

监听鼠标滚轮事件

通过监听鼠标滚轮事件实现滚动缩放效果,注意要阻止默认行为。

const img = document.getElementById('zoom-image');
let scale = 1;

img.addEventListener('wheel', (e) => {
  e.preventDefault();

  if (e.deltaY < 0) {
    scale += 0.1;
  } else {
    if (scale > 0.1) {
      scale -= 0.1;
    }
  }

  img.style.transform = `scale(${scale})`;
});

使用 Canvas 实现高级缩放

对于需要更复杂控制的场景,可以使用 Canvas 绘制并实现缩放功能。

const canvas = document.getElementById('zoom-canvas');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = function() {
  ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
};

let scale = 1;

function zoom(factor) {
  scale *= factor;
  canvas.width = img.width * scale;
  canvas.height = img.height * scale;
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
}

实现拖拽和缩放结合

结合拖拽和缩放功能,提供更好的用户体验。

const img = document.getElementById('zoom-image');
let scale = 1;
let posX = 0;
let posY = 0;
let isDragging = false;
let startX, startY;

img.addEventListener('mousedown', (e) => {
  isDragging = true;
  startX = e.clientX - posX;
  startY = e.clientY - posY;
});

window.addEventListener('mousemove', (e) => {
  if (!isDragging) return;
  posX = e.clientX - startX;
  posY = e.clientY - startY;
  img.style.transform = `translate(${posX}px, ${posY}px) scale(${scale})`;
});

window.addEventListener('mouseup', () => {
  isDragging = false;
});

img.addEventListener('wheel', (e) => {
  e.preventDefault();
  const delta = e.deltaY < 0 ? 1.1 : 0.9;
  scale *= delta;
  img.style.transform = `translate(${posX}px, ${posY}px) scale(${scale})`;
});

使用第三方库

对于更复杂的需求,可以考虑使用专门的库如:

  • panzoom:轻量级的平移缩放库
  • medium-zoom:类似Medium网站的图片缩放效果
  • viewerjs:功能全面的图片查看器
// 使用panzoom示例
const element = document.getElementById('zoom-image');
panzoom(element, {
  maxZoom: 5,
  minZoom: 0.5
});

以上方法可以根据具体需求选择使用,CSS transform 方案适合简单场景,Canvas 方案适合需要像素级控制的场景,第三方库则能快速实现复杂功能。

js实现图片放大缩小

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

相关文章

vue2实现图片懒加载

vue2实现图片懒加载

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

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现vr

js实现vr

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