当前位置:首页 > 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 属性实现缩放效果:

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

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

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 事件实现移动设备上的捏合缩放:

react实现图片缩放

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

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

相关文章

vue实现图片单选

vue实现图片单选

实现图片单选功能 在Vue中实现图片单选功能可以通过v-model绑定选中状态,结合CSS样式控制选中效果。以下是具体实现方式: 基础实现方案 <template> <div…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…

vue实现图片闪烁

vue实现图片闪烁

实现图片闪烁效果的方法 在Vue中实现图片闪烁效果可以通过CSS动画或JavaScript动态控制样式。以下是几种常见方法: CSS动画实现 通过@keyframes定义闪烁动画,并应用到图片元素上…

react如何渲染图片

react如何渲染图片

在React中渲染图片的方法 使用<img>标签直接引入本地图片 将图片文件放入项目目录(如src/assets),通过相对路径引入。需注意Webpack可能需要配置file-loader…

Vue实现图片 放大

Vue实现图片 放大

Vue实现图片放大功能 使用v-viewer插件 安装v-viewer插件: npm install v-viewer 在main.js中引入并配置: import Viewer from 'v-…

vue缩放图实现

vue缩放图实现

实现 Vue 缩放图功能 在 Vue 中实现图片缩放功能可以通过第三方库或自定义逻辑完成。以下是几种常见方法: 使用 vue-zoomer 库 安装依赖: npm install vue-zoo…