当前位置:首页 > JavaScript

js实现图片的放大缩小

2026-03-01 07:27:58JavaScript

使用 CSS transform 实现缩放

通过修改 CSS 的 transform: scale() 属性实现图片缩放效果。这种方式性能较好,适合简单的交互需求。

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

function zoom(factor) {
    currentScale *= factor;
    img.style.transform = `scale(${currentScale})`;
}

// 放大
document.getElementById('zoomIn').addEventListener('click', () => zoom(1.2));
// 缩小
document.getElementById('zoomOut').addEventListener('click', () => zoom(0.8));

通过修改 width/height 属性实现

直接修改图片的宽高属性,适合需要精确控制像素尺寸的场景。

js实现图片的放大缩小

const img = document.querySelector('img');
const originalWidth = img.clientWidth;
const originalHeight = img.clientHeight;

function resize(percentage) {
    img.width = originalWidth * percentage;
    img.height = originalHeight * percentage;
}

// 放大到120%
document.getElementById('enlarge').addEventListener('click', () => resize(1.2));
// 缩小到80%
document.getElementById('shrink').addEventListener('click', () => resize(0.8));

鼠标滚轮缩放实现

监听鼠标滚轮事件实现动态缩放,需注意阻止默认事件避免页面滚动。

js实现图片的放大缩小

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})`;
});

触摸屏双指缩放实现

通过检测触摸事件实现移动设备上的捏合缩放功能。

const img = document.querySelector('img');
let initialDistance = null;

img.addEventListener('touchstart', (e) => {
    if (e.touches.length === 2) {
        initialDistance = Math.hypot(
            e.touches[0].clientX - e.touches[1].clientX,
            e.touches[0].clientY - e.touches[1].clientY
        );
    }
});

img.addEventListener('touchmove', (e) => {
    if (e.touches.length === 2 && initialDistance) {
        const currentDistance = Math.hypot(
            e.touches[0].clientX - e.touches[1].clientX,
            e.touches[0].clientY - e.touches[1].clientY
        );
        const scale = currentDistance / initialDistance;
        img.style.transform = `scale(${scale})`;
    }
});

使用第三方库实现高级功能

对于需要复杂交互的场景,可以考虑使用专业库如:

// 使用medium-zoom的示例
import mediumZoom from 'medium-zoom';

const zoom = mediumZoom('img');
zoom.on('open', () => {
    console.log('Image zoomed');
});

注意事项

  • 保持宽高比避免图片变形
  • 设置合理的缩放限制防止过度缩放
  • 移动端需考虑手势事件兼容性
  • 性能优化:对于大图建议使用缩略图+全屏查看模式

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

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…