Skip to content

组件

vue-select-avatar 提供了两个核心组件:<Viewport/>(视口裁剪组件)和 <Preview/>(预览组件)。

<Viewport/>

视口裁剪组件,用于显示图片并提供裁剪交互功能。

基本示例

vue
<script setup lang="ts">
import { ref } from 'vue'
import { Viewport } from 'vue-select-avatar'

const viewportRef = ref()

const handleCrop = async () => {
  const file = await viewportRef.value.crop({
    size: 200,
    type: 'image/jpeg',
    quality: 0.9,
  })
  console.log('裁剪后的文件:', file)
}
</script>

<template>
  <Viewport ref="viewportRef" />
  <button @click="handleCrop">裁剪</button>
</template>

Props

ts
export interface ViewportProps {
  /**
   * 视口尺寸(同时设置宽高)
   *
   * @default 300
   */
  size?: number | 'full'
  /**
   * 视口宽度(覆盖size)
   */
  width?: number | 'full'
  /**
   * 视口高度(覆盖size)
   */
  height?: number | 'full'
  /**
   * 图片信息
   */
  info?: ImageInfo
  /**
   * 观察窗口大小(<=1 表示比例,>1 表示像素值)
   *
   * @default 0.6
   */
  view?: number
  /**
   * 是否为网格背景
   *
   * @default false
   */
  grid?: boolean
  /**
   * 缩放步长(<1 表示比例,>=1 表示像素值)
   *
   * @default 0.05
   */
  step?: number
  /**
   * 缩放步长(按下Ctrl键时,设置为0时,则不生效,<1 表示比例,>=1 表示像素值)
   *
   * @default 0.02
   */
  ctrlStep?: number
  /**
   * 缩放步长(按下Shift键时,设置为0时,则不生效,<1 表示比例,>=1 表示像素值)
   *
   * @default 2
   */
  shiftStep?: number
  /**
   * 滚轮反向
   *
   * @default false
   */
  reverse?: boolean
  /**
   * 最小观察窗口尺寸(mode=fixed-image 时生效)
   *
   * @default 10
   */
  minView?: number
  /**
   * 图片边距(mode=fixed-image 时生效)
   *
   * @default 10
   */
  padding?: number
  /**
   * 方向键移动
   *
   * @default true
   */
  arrow?: boolean
  /**
   * wasd 键移动
   *
   * @default true
   */
  wasd?: boolean
  /**
   * 遮罩实现方式
   *
   * - 'clip':使用 clip-path
   * - 'double':使用双层图片
   *
   * @default 'clip'
   */
  mask?: 'clip' | 'double'
  /**
   * 移动模式:'fixed-view'=观察窗固定图片移动,'fixed-image'=图片固定观察窗移动
   *
   * @default 'fixed-view'
   */
  mode?: 'fixed-view' | 'fixed-image'
  /**
   * 是否显示观察窗边框
   *
   * @default false
   */
  border?: boolean | number
}

Slots

插槽名称描述
point-top-left左上角控制点自定义内容(仅在 mode='fixed-image' 时生效)
point-top-right右上角控制点自定义内容(仅在 mode='fixed-image' 时生效)
point-bottom-left左下角控制点自定义内容(仅在 mode='fixed-image' 时生效)
point-bottom-right右下角控制点自定义内容(仅在 mode='fixed-image' 时生效)

Exposes

ts
export interface ViewportExposes {
  /**
   * 选择图片
   * @param options 选择图片选项
   */
  select: (options?: ImageSelectOptions) => Promise<void>
  /**
   * 裁剪图片
   * @param options 裁剪选项
   * @returns 裁剪后的图片信息
   */
  crop: <T extends File | string = string | File>(options?: CropOptions) => Promise<T>
  /**
   * 初始化位置信息
   * @param res 图片信息
   */
  positionInit: (res: ImageSelectResult) => void
}

<Preview/>

预览组件,用于实时显示裁剪效果。需要与 Viewport 组件配合使用。

基本示例

vue
<script setup lang="ts">
import { ref } from 'vue'
import { Viewport, Preview } from 'vue-select-avatar'

const viewportRef = ref()
</script>

<template>
  <Viewport ref="viewportRef" />
  <Preview :viewport-ref="viewportRef" round />
</template>

Props

ts
export interface PreviewProps {
  /**
   * 预览尺寸
   *
   * @default 180
   */
  size?: number | 'full'
  /**
   * 视口实例
   */
  viewportRef?: ViewportInstance
  /**
   * 是否圆形
   */
  round?: boolean
  /**
   * 背景颜色
   */
  bg?: string
}

Slots

Preview 组件不提供插槽。

Exposes

Preview 组件不提供暴露的方法。