当前位置:首页 > React

react实现图片缩放

2026-01-27 01:11:14React

使用 react-transform-zoom-pan 库

安装 react-transform-zoom-pan 库:

npm install react-transform-zoom-pan

创建一个可缩放和拖拽的图片组件:

import { TransformWrapper, TransformComponent } from "react-transform-zoom-pan";

function ZoomableImage({ src }) {
  return (
    <TransformWrapper>
      <TransformComponent>
        <img src={src} alt="zoomable" />
      </TransformComponent>
    </TransformWrapper>
  );
}

使用 CSS transform 实现缩放

通过状态管理缩放比例,使用 CSS transform 属性实现缩放效果:

react实现图片缩放

import { useState } from 'react';

function ZoomableImage({ src }) {
  const [scale, setScale] = useState(1);

  return (
    <div>
      <div style={{ transform: `scale(${scale})`, transformOrigin: '0 0' }}>
        <img src={src} alt="zoomable" />
      </div>
      <button onClick={() => setScale(scale + 0.1)}>Zoom In</button>
      <button onClick={() => setScale(scale - 0.1)}>Zoom Out</button>
    </div>
  );
}

使用 react-zoom-pan-pinch 库

安装 react-zoom-pan-pinch 库:

npm install react-zoom-pan-pinch

实现带有平移和缩放功能的图片组件:

react实现图片缩放

import { TransformWrapper, TransformComponent } from "react-zoom-pan-pinch";

function ZoomableImage({ src }) {
  return (
    <TransformWrapper>
      {({ zoomIn, zoomOut, resetTransform }) => (
        <>
          <div className="tools">
            <button onClick={() => zoomIn()}>Zoom In</button>
            <button onClick={() => zoomOut()}>Zoom Out</button>
            <button onClick={() => resetTransform()}>Reset</button>
          </div>
          <TransformComponent>
            <img src={src} alt="zoomable" />
          </TransformComponent>
        </>
      )}
    </TransformWrapper>
  );
}

实现鼠标滚轮缩放

监听 wheel 事件实现滚轮缩放效果:

import { useState, useRef } from 'react';

function ZoomableImage({ src }) {
  const [scale, setScale] = useState(1);
  const imageRef = useRef(null);

  const handleWheel = (e) => {
    e.preventDefault();
    const delta = e.deltaY > 0 ? -0.1 : 0.1;
    setScale(prev => Math.max(0.1, prev + delta));
  };

  return (
    <div onWheel={handleWheel} ref={imageRef}>
      <img 
        src={src} 
        alt="zoomable" 
        style={{ 
          transform: `scale(${scale})`,
          transformOrigin: '0 0',
          width: '100%'
        }} 
      />
    </div>
  );
}

实现双击缩放

添加双击事件实现快速缩放:

function ZoomableImage({ src }) {
  const [scale, setScale] = useState(1);

  const handleDoubleClick = () => {
    setScale(scale === 1 ? 2 : 1);
  };

  return (
    <div onDoubleClick={handleDoubleClick}>
      <img 
        src={src} 
        alt="zoomable" 
        style={{ 
          transform: `scale(${scale})`,
          transformOrigin: '0 0',
          cursor: 'zoom-in'
        }} 
      />
    </div>
  );
}

实现触摸屏捏合缩放

处理 touch 事件实现移动设备上的捏合缩放:

function ZoomableImage({ src }) {
  const [scale, setScale] = useState(1);
  const [initialDistance, setInitialDistance] = useState(null);

  const handleTouchStart = (e) => {
    if (e.touches.length === 2) {
      setInitialDistance(getDistance(e.touches[0], e.touches[1]));
    }
  };

  const handleTouchMove = (e) => {
    if (e.touches.length === 2) {
      e.preventDefault();
      const currentDistance = getDistance(e.touches[0], e.touches[1]);
      if (initialDistance) {
        const newScale = (currentDistance / initialDistance) * scale;
        setScale(Math.max(0.5, Math.min(newScale, 3)));
      }
    }
  };

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

  return (
    <div 
      onTouchStart={handleTouchStart}
      onTouchMove={handleTouchMove}
      onTouchEnd={() => setInitialDistance(null)}
    >
      <img 
        src={src} 
        alt="zoomable" 
        style={{ 
          transform: `scale(${scale})`,
          transformOrigin: '0 0',
          touchAction: 'none'
        }} 
      />
    </div>
  );
}

标签: 缩放图片
分享给朋友:

相关文章

css动画制作图片

css动画制作图片

CSS动画制作图片的方法 使用CSS动画可以为图片添加各种动态效果,提升网页的视觉吸引力。以下是几种常见的CSS动画实现方式: 关键帧动画(@keyframes) 通过定义关键帧来控制动画的各个阶段…

css网页制作漂浮图片

css网页制作漂浮图片

使用CSS实现漂浮图片效果 通过CSS的animation属性和@keyframes规则可以轻松实现图片漂浮效果。以下是几种常见实现方式: 基础漂浮动画 通过关键帧定义图片的垂直移动,模拟漂浮感:…

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-a…

vue图片实现旋转

vue图片实现旋转

使用 CSS transform 实现图片旋转 在 Vue 中可以通过 CSS 的 transform 属性实现图片旋转效果。创建一个数据属性控制旋转角度,通过绑定样式动态更新。 <t…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './imag…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…