2026-09-29 17:09:39 +08:00
|
|
|
|
---
|
|
|
|
|
|
title: 基础使用
|
|
|
|
|
|
description: 添加样式入口并创建一个可交互的图片裁剪器。
|
|
|
|
|
|
order: 10
|
|
|
|
|
|
toc:
|
|
|
|
|
|
- id: stylesheet
|
|
|
|
|
|
title: 样式入口
|
|
|
|
|
|
- id: cropper
|
|
|
|
|
|
title: 裁剪器
|
|
|
|
|
|
- id: controls
|
|
|
|
|
|
title: 外部控件
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 样式入口 {#stylesheet}
|
|
|
|
|
|
|
|
|
|
|
|
在应用的 Tailwind 样式入口中添加:
|
|
|
|
|
|
|
|
|
|
|
|
```css
|
|
|
|
|
|
@import "@workspace/cropper/globals.css";
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 裁剪器 {#cropper}
|
|
|
|
|
|
|
2026-09-29 17:46:16 +08:00
|
|
|
|
可以使用 class,也可以直接传入 `width`、`height`。`aspectRatio` 接受数字或 `"宽:高"` 字符串:
|
2026-09-29 17:09:39 +08:00
|
|
|
|
|
|
|
|
|
|
```tsx
|
|
|
|
|
|
import { Cropper, type CropArea } from "@workspace/cropper"
|
|
|
|
|
|
|
|
|
|
|
|
function ProductImageCropper({ src }: { src: string }) {
|
|
|
|
|
|
const [area, setArea] = React.useState<CropArea>()
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
<Cropper
|
|
|
|
|
|
src={src}
|
|
|
|
|
|
alt="商品图片"
|
2026-09-29 17:46:16 +08:00
|
|
|
|
aspectRatio="4:3"
|
2026-09-29 17:09:39 +08:00
|
|
|
|
className="w-full max-w-xl rounded-xl"
|
|
|
|
|
|
onCropAreaChange={setArea}
|
|
|
|
|
|
/>
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
用户可以拖拽图片、滚动缩放,或者在 Cropper 聚焦时使用方向键、`+`、`-`、`0` 和 `Home`。
|
|
|
|
|
|
|
2026-09-29 17:46:16 +08:00
|
|
|
|
`src` 也可以直接传入文件选择器获得的 `Blob` 或 `File`。组件会创建临时 object URL,并在图片改变或卸载时自动释放。
|
|
|
|
|
|
|
2026-09-29 17:09:39 +08:00
|
|
|
|
## 外部控件 {#controls}
|
|
|
|
|
|
|
2026-09-29 17:46:16 +08:00
|
|
|
|
通过 `value` 和 `onValueChange` 控制裁剪状态,即可接入 Slider。快速重置可以直接调用组件 ref 的 `reset()`;`minZoom` 最小为 `1`,保证图片始终覆盖整个视口。
|