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

相关文章

js实现全选

js实现全选

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…