当前位置:首页 > JavaScript

js实现图片的放大缩小

2026-04-04 08:05:26JavaScript

使用 CSS transform 实现缩放

通过修改 CSS 的 transform: scale() 属性实现图片缩放效果。监听鼠标滚轮事件(wheel),动态调整 scale 值。

const img = document.querySelector('img');
let scale = 1;

img.addEventListener('wheel', (e) => {
  e.preventDefault();
  scale += e.deltaY * -0.01; // 调整缩放速度
  scale = Math.min(Math.max(0.1, scale), 4); // 限制缩放范围
  img.style.transform = `scale(${scale})`;
});

使用 Canvas 动态绘制缩放

通过 Canvas 的 drawImage 方法结合缩放参数,实现更灵活的图片控制。

const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = 'image.jpg';
let scale = 1;

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

canvas.addEventListener('wheel', (e) => {
  e.preventDefault();
  scale += e.deltaY * -0.01;
  scale = Math.min(Math.max(0.1, scale), 4);
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.drawImage(img, 0, 0, img.width * scale, img.height * scale);
});

结合拖拽与缩放

在缩放基础上添加拖拽功能,通过 mousedownmousemovemouseup 事件实现图片平移。

const img = document.querySelector('img');
let scale = 1;
let isDragging = false;
let startX, startY, translateX = 0, translateY = 0;

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

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

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

img.addEventListener('wheel', (e) => {
  e.preventDefault();
  scale += e.deltaY * -0.01;
  scale = Math.min(Math.max(0.1, scale), 4);
  img.style.transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
});

使用第三方库(如 Hammer.js)

引入 Hammer.js 处理手势操作,支持捏合缩放和拖拽。

<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.min.js"></script>
<script>
  const img = document.querySelector('img');
  const hammer = new Hammer(img);
  let scale = 1;

  hammer.get('pinch').set({ enable: true });
  hammer.on('pinch', (e) => {
    scale = e.scale;
    img.style.transform = `scale(${scale})`;
  });
</script>

响应式缩放限制

确保缩放后图片不会超出容器边界,通过计算边界值动态调整 translate

js实现图片的放大缩小

function checkBounds() {
  const maxX = (img.width * scale - img.parentElement.width) / 2;
  const maxY = (img.height * scale - img.parentElement.height) / 2;
  translateX = Math.min(Math.max(translateX, -maxX), maxX);
  translateY = Math.min(Math.max(translateY, -maxY), maxY);
  img.style.transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
}

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

相关文章

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bord…

h5实现全景图片

h5实现全景图片

H5 实现全景图片的方法 使用 Three.js 库 Three.js 是一个强大的 3D 库,可以用于创建全景图片效果。以下是一个简单的实现步骤: 引入 Three.js 库 <scri…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

vue实现展示图片

vue实现展示图片

在 Vue 中展示图片的方法 静态图片展示 静态图片通常存放在项目的 public 或 assets 目录下。使用 img 标签直接引用。 <template> <img sr…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…