更新记录
1.0.0(2025-04-10)
初次版本
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.19 app-vue | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ | √ | √ |
插件名:zmt-avatar-cropper
主要完美支持PC浏览器端,APP和小程序没有测试,如需要请自行测试。 本人搜了很久,没找到一款真正适合PC浏览器端的图片裁剪插件,头疼了很久,一生气索性写一个吧,本人亲自测试编写的,自己用的没有任何问题,直接返回上传到云存储后的网上路径和本地临时路径(非常完美和神奇)。
使用方法:
直接导入到你的项目中,目录:uni_modules,无需引入,直接使用就行。代码如下:
<zmt-avatar-cropper @close="updateShowCrop" @confirm="uploadSuccess" :isShow="showCrop" :imageSrc="imageSrc"></zmt-avatar-cropper>
属性说明如下:
属性名 | 必填 | 默认值 | 说明 |
---|---|---|---|
imageSrc | 是 | null | 图片临时路径名,详情请看下方实例代码和说明 |
isShow | 是 | false | 是否显示裁剪弹窗 |
cropMinSize | 否 | 200 | 选取框的最小尺寸,单位为px |
cropMaxSize | 否 | 450 | 选取框最大尺寸,单位px |
cropDefaultSize | 否 | 400 | 选取框的默认尺寸 |
imageSrc路径说明
此路径为通过uniapp选取后的临时路径地址,选取代码如下:
//编辑头像
editAvatar(){
var that = this;
uni.chooseImage({
count: 1,
sizeType: ['original'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
that.showCrop=true;
that.imageSrc = res.tempFilePaths[0]; //此路径就是要传给插件的路径
}
});
},
事件说明如下:
事件名 | 必填 | 返回值 | 说明 |
---|---|---|---|
@confirm | 是 | function | 点击裁剪插件里的确定按钮以后触发,请看下方说明 |
@close | 是 | function | 点击了裁剪插件里的关闭按钮以后触发 |
@confirm事件详细说明
此事件会返回以下参数数据:
参数名 | 示例值 | 说明 |
---|---|---|
fileID | https://mp-2298d5e4-aa54-4efc-a8b7-bbb75295a007.cdn.bspapp.com/cloudstorage/4e481dd4-a140-4e1e-b2dc-aee10fb7ad0c.png | 裁剪上传完以后的完整远程图片路径,可以直接保存到数据库使用 |
filePath | blob:http://localhost:5173/d9e3f027-e982-4dac-a7ce-bd10cb1b6e06 | 裁剪后的临时图片路径,如果采用第三方上传接口可以用此值直传 |
success | true | 一般为true,代表成功 |
confirm事件示例代码
//裁剪并上传图片以后
uploadSuccess(e){
console.log('返回参数',e);
var that = this;
var avatar = e.fileID;
if(this.userinfo && this.userinfo._id){
//修改头像
db.collection('uni-id-users').where({_id:this.userinfo._id}).update({avatar:avatar}).then(res=>{
this.userinfo.avatar = avatar;
uni.setStorage({
key:'login-****',
data:that.userinfo
})
});
}
}
@close事件详细说明
此事件主要是用来更新父组件的关闭状态值showCrop,否则会导致第二次无法弹出的情况。
//子组件传过来的更新父组件的状态
updateShowCrop(e){
this.showCrop = e;
}
特殊说明:
uniapp与uniCloud是完美组合,最好开通uniapp自己的云服务空间,可以直接将文件上传到云存储和到云数据库。到此结束,辛苦编写,还请支持。