当前位置:首页 > JavaScript

js实现放大缩小

2026-02-28 23:21:20JavaScript

实现图片放大缩小功能

通过监听鼠标滚轮事件或点击按钮控制图片的缩放比例,结合CSS的transform: scale()属性实现平滑缩放效果。

const img = document.getElementById('zoomImage');
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})`;
});

// 按钮控制缩放
document.getElementById('zoomIn').addEventListener('click', () => {
  scale += 0.1;
  img.style.transform = `scale(${scale})`;
});

document.getElementById('zoomOut').addEventListener('click', () => {
  scale -= 0.1;
  img.style.transform = `scale(${scale})`;
});

使用transform-origin控制缩放中心点

默认缩放以元素中心为原点,可通过CSS调整缩放基准点:

#zoomImage {
  transform-origin: 0 0; /* 左上角作为缩放原点 */
  transition: transform 0.1s ease; /* 添加平滑过渡 */
}

结合拖拽功能的缩放实现

在缩放的同时保持拖拽功能,需同步处理位移和缩放参数:

let posX = 0, posY = 0, isDragging = false;

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;
  updateTransform();
});

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

function updateTransform() {
  img.style.transform = `translate(${posX}px, ${posY}px) scale(${scale})`;
}

使用第三方库实现高级缩放

对于复杂场景可考虑使用专用库:

安装并使用panzoom的示例:

import panzoom from 'panzoom';

const element = document.getElementById('zoomContainer');
panzoom(element, {
  maxZoom: 4,
  minZoom: 0.5,
  smoothScroll: false
});

移动端触摸缩放实现

通过Touch事件实现多点触控缩放:

let initialDistance = 0;

img.addEventListener('touchstart', (e) => {
  if (e.touches.length === 2) {
    initialDistance = getDistance(e.touches[0], e.touches[1]);
  }
});

img.addEventListener('touchmove', (e) => {
  if (e.touches.length === 2) {
    const currentDistance = getDistance(e.touches[0], e.touches[1]);
    scale *= currentDistance / initialDistance;
    scale = Math.min(Math.max(0.1, scale), 4);
    img.style.transform = `scale(${scale})`;
    initialDistance = currentDistance;
  }
});

function getDistance(touch1, touch2) {
  return Math.hypot(
    touch2.clientX - touch1.clientX,
    touch2.clientY - touch1.clientY
  );
}

js实现放大缩小

标签: js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 cons…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现菜单

js实现菜单

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