CropperImage
CropperImage
接口提供了用于操作 <cropper-image>
元素的布局和表示的属性和方法。
示例
基本
TIP
此元素的默认宽度和高度为 0
。
有图片源
限制边界
Details
<template>
<div class="cropper-container">
<form>
<fieldset>
<legend>Image Fit:</legend>
<input
id="inputImageFitContain"
v-model="imageFit"
type="radio"
name="imageFit"
value="contain"
>
<label for="inputImageFitContain">contain</label>
<input
id="inputImageFitCover"
v-model="imageFit"
type="radio"
name="imageFit"
value="cover"
>
<label for="inputImageFitCover">cover</label>
<input
id="inputImageFitNone"
v-model="imageFit"
type="radio"
name="imageFit"
value="none"
>
<label for="inputImageFitNone">none</label>
</fieldset>
</form>
<cropper-canvas
ref="cropperCanvas"
:key="imageFit"
background
>
<cropper-image
ref="cropperImage"
:src="src"
alt="Picture"
rotatable
scalable
skewable
translatable
@transform="onCropperImageTransform"
/>
<cropper-handle
action="move"
plain
/>
</cropper-canvas>
</div>
</template>
<script lang="ts">
import type CropperCanvas from '@cropper/element-canvas';
import type CropperImage from '@cropper/element-image';
const { BASE_URL } = import.meta.env;
export default {
name: 'CropperImageExample',
data() {
return {
src: `${BASE_URL}picture.jpg`,
imageFit: 'contain',
};
},
methods: {
onCropperImageTransform(event: CustomEvent) {
const cropperCanvas = this.$refs.cropperCanvas as CropperCanvas;
if (!cropperCanvas || this.imageFit === 'none') {
return;
}
const cropperImage = this.$refs.cropperImage as CropperImage;
const cropperCanvasRect = cropperCanvas.getBoundingClientRect();
// 1. Clone the cropper image.
const cropperImageClone = cropperImage.cloneNode() as CropperImage;
// 2. Apply the new matrix to the cropper image clone.
cropperImageClone.style.transform = `matrix(${event.detail.matrix.join(', ')})`;
// 3. Make the cropper image clone invisible.
cropperImageClone.style.opacity = '0';
// 4. Append the cropper image clone to the cropper canvas.
cropperCanvas.appendChild(cropperImageClone);
// 5. Compute the boundaries of the cropper image clone.
const cropperImageRect = cropperImageClone.getBoundingClientRect();
// 6. Remove the cropper image clone.
cropperCanvas.removeChild(cropperImageClone);
if (
(this.imageFit === 'contain' && (
(
cropperImageRect.top > cropperCanvasRect.top
&& cropperImageRect.right < cropperCanvasRect.right
)
|| (
cropperImageRect.right < cropperCanvasRect.right
&& cropperImageRect.bottom < cropperCanvasRect.bottom
)
|| (
cropperImageRect.bottom < cropperCanvasRect.bottom
&& cropperImageRect.left > cropperCanvasRect.left
)
|| (
cropperImageRect.left > cropperCanvasRect.left
&& cropperImageRect.top > cropperCanvasRect.top
)
))
|| (this.imageFit === 'cover' && (
cropperImageRect.top > cropperCanvasRect.top
|| cropperImageRect.right < cropperCanvasRect.right
|| cropperImageRect.bottom < cropperCanvasRect.bottom
|| cropperImageRect.left > cropperCanvasRect.left
))
) {
event.preventDefault();
}
},
},
};
</script>
<style lang="scss" scoped>
.cropper-container {
border: 1px solid var(--vp-c-divider);
border-radius: 0.375rem;
margin-bottom: 1rem;
margin-top: 1rem;
padding: 1.25rem 1.5rem;
fieldset {
border: 1px solid var(--vp-c-divider);
border-radius: 0.375rem;
margin-bottom: 1rem;
padding: 0.25rem 0.75rem 0.75rem 0.75rem;
> input {
margin: 0 0.25rem 0 0;
transform: translateY(-0.5px);
vertical-align: middle;
}
> label {
margin-right: 0.5rem;
}
}
cropper-canvas {
height: 320px;
}
}
</style>
属性
从其父级 CropperElement
继承属性,并实现以下属性:
名称 | 类型 | 默认值 | 可选值 | 描述 |
---|---|---|---|---|
initial-center-size | string | "contain" | "contain" , "cover" | 指示图像与其父元素的中心对齐时的初始大小。 |
rotatable | boolean | false | - | 指示此元素是否可旋转。 |
scalable | boolean | false | - | 指示此元素是否可缩放。 |
skewable | boolean | false | - | 指示此元素是否可倾斜。 |
slottable | boolean | false | - | 指示此元素是否启用默认插槽。 |
translatable | boolean | false | - | 指示此元素是否可移动。 |
默认情况下,内置的 <img>
元素将继承以下属性:
alt
crossorigin
decoding
importance
loading
referrerpolicy
sizes
src
srcset
方法
$ready
语法:
$ready()
$ready(callback)
参数:
callback
:- 类型:
Function
- 成功加载图片后执行的回调。
- 类型:
返回值:
- 类型:
Promise
- 一个以图片元素为给定值解析后的 Promise。
- 类型:
示例:
jsconst cropperImage = new CropperImage(); cropperImage.$ready((image) => { console.log(image.naturalWidth, image.naturalHeight); }); cropperImage.src = '/cropperjs/v2/picture.jpg';
成功加载图像后延迟执行回调。
$center
- 语法:
$center()
$center(size)
- 参数:
size
:- 类型:
string
- 可选值:
"contain"
, and"cover"
. - 图像的尺寸模式。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
将图像与其父元素的中心对齐。
$move
- 语法:
$move(x)
$move(x, y)
- 参数:
x
:- 类型:
number
- 水平方向的移动距离。
- 类型:
y
:- 类型:
number
- 默认值:
x
- 垂直方向的移动距离。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
移动图像。
$moveTo
- 语法:
$moveTo(x)
$moveTo(x, y)
- 参数:
x
:- 类型:
number
- 水平方向的新位置。
- 类型:
y
:- 类型:
number
- 默认值:
x
- 垂直方向的新位置。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
移动图像到指定位置。
$rotate
- 语法:
$rotate(angle)
- 参数:
angle
:- 类型:
number | string
- 旋转角度(以弧度为单位)。默认单位是
rad
。
- 类型:
x
:- 类型:
number
- 默认值:图像在水平方向的中心。
- 水平方向的旋转原点。
- 类型:
y
:- 类型:
number
- 默认值:图像在垂直方向的中心。
- 垂直方向的旋转原点。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
- 示例:
$rotate(0.8)
$rotate('0.8rad')
$rotate('45deg')
$rotate('50grad')
$rotate('0.1turn')
$rotate('90deg', 0, 0)
旋转图像。它类似于 CSS 函数 rotate() 或 CanvasRenderingContext2D.rotate()。
$zoom
语法:
$zoom(scale)
$zoom(scale, x, y)
参数:
scale
:- 类型:
number
- 缩放系数。正数表示放大,负数表示缩小。
- 类型:
x
:- 类型:
number
- 默认值:图像在水平方向的中心。
- 水平方向的缩放原点。
- 类型:
y
:- 类型:
number
- 默认值:图像在垂直方向的中心。
- 垂直方向的缩放原点。
- 类型:
返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
示例:
jscropperImage.$zoom(0.1); // 放大 10% cropperImage.$zoom(-0.1); // 缩小 10% cropperImage.$zoom(0.1, 0, 0); // 以图片左上角为原点放大 10% cropperImage.$zoom(-0.1, 0, 0); // 以图片左上角为原点缩小 10%
缩放图像。
$scale
语法:
$scale(x)
$scale(x, y)
参数:
x
:- 类型:
number
- 水平方向的缩放系数。
- 类型:
y
:- 类型:
number
- 默认值:
x
- 垂直方向的缩放系数。
- 类型:
返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
示例:
jscropperImage.$scale(1.1); // 放大 10% cropperImage.$scale(0.9); // 缩小 10% cropperImage.$scale(-1); // 翻转水平和垂直方向 cropperImage.$scale(-1, 1); // 翻转水平方向 cropperImage.$scale(1, -1); // 翻转垂直方向
缩放图像。它类似于 CSS 函数 scale() 或 CanvasRenderingContext2D.scale()。
$skew
- 语法:
$skew(x)
$skew(x, y)
- 参数:
x
:- 类型:
number | string
- 水平方向的倾斜角度。默认单位是
rad
。
- 类型:
y
:- 类型:
number | string
- 默认值:
x
- 垂直方向的倾斜角度。默认单位是
rad
。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
- 示例:
$skew(0.8)
$skew('0.8rad')
$skew('45deg')
$skew('50grad')
$skew('0.1turn')
$skew(0, 0.8)
倾斜图像。它类似于 CSS 函数 skew()。
$translate
- 语法:
$translate(x)
$translate(x, y)
- 参数:
x
:- 类型:
number
- 水平方向的平移距离。
- 类型:
y
:- 类型:
number
- 默认值:
x
- 垂直方向的平移距离。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
平移图像。它类似于 CSS 函数 translate() 或 CanvasRenderingContext2D.translate()。
$transform
- 语法:
$transform(a, b, c, d, e, f)
- 参数:
a
:- 类型:
number
- 水平方向的缩放系数。
- 类型:
b
:- 类型:
number
- 垂直方向的倾斜角度。
- 类型:
c
:- 类型:
number
- 水平方向的倾斜角度。
- 类型:
d
:- 类型:
number
- 垂直方向的缩放系数。
- 类型:
e
:- 类型:
number
- 水平方向的平移距离。
- 类型:
f
:- 类型:
number
- 垂直方向的平移距离。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
变换图像。它类似于 CSS 函数 matrix() 或 CanvasRenderingContext2D.transform()。
$setTransform
- 语法:
$setTransform(a, b, c, d, e, f)
$setTransform(a)
- 参数:
a
:- 类型:
number | Array
- 水平方向的缩放系数,或变换矩阵。
- 类型:
b
:- 类型:
number
- 垂直方向的倾斜角度。
- 类型:
c
:- 类型:
number
- 水平方向的倾斜角度。
- 类型:
d
:- 类型:
number
- 垂直方向的缩放系数。
- 类型:
e
:- 类型:
number
- 水平方向的平移距离。
- 类型:
f
:- 类型:
number
- 垂直方向的平移距离。
- 类型:
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
将当前变换重置(覆盖)为指定的单位矩阵,然后调用由该方法的参数描述的变换。这使你可以缩放、旋转、平移(移动)和倾斜上下文。它类似于 CanvasRenderingContext2D.setTransform()。
$getTransform
- 语法:
$getTransform()
- 返回值:
- 类型:
Array
- 元素的当前变换矩阵。
- 类型:
检索应用于元素的当前变换矩阵。它类似于 CanvasRenderingContext2D.getTransform()。
$resetTransform
- 语法:
$resetTransform()
- 等同于:
$setTransform(1, 0, 0, 1, 0, 0)
$setTransform([1, 0, 0, 1, 0, 0])
- 返回值:
- 类型:
CropperImage
- 元素实例。
- 类型:
将当前变换重置为初始单位矩阵。它类似于 CanvasRenderingContext2D.resetTransform()。
事件
transform
- 事件:
- event.bubbles:
true
- event.cancelable:
true
- event.composed:
true
- event.detail:
- 类型:
Object
- 图像的变换信息。
- 类型:
- event.detail.matrix:
- 类型:
Array
- 新的(下一个)矩阵对象。
- 类型:
- event.detail.oldMatrix:
- 类型:
Array
- 旧的(当前)矩阵对象。
- 类型:
- event.bubbles:
当元素的 transform
CSS 属性将要变更时,将触发该事件。
插槽
此元素中没有可用的插槽。
你可以通过将
slottable
属性设置为true
来启用默认插槽:html<cropper-image slottable></cropper-image>