23
23
</el-upload >
24
24
<div class =" content-title" >支持裁剪</div >
25
25
<div class =" plugins-tips" >
26
- Vue-Core-Image-Upload:一款轻量级的vue上传插件,支持裁剪 。
27
- 访问地址:<a href =" https://github.com/Vanthink-UED /vue-core-image-upload " target =" _blank" >Vue-Core-Image-Upload </a >
26
+ vue-cropperjs:一个封装了 cropperjs 的 Vue 组件 。
27
+ 访问地址:<a href =" https://github.com/Agontuk /vue-cropperjs " target =" _blank" >vue-cropperjs </a >
28
28
</div >
29
- <img class =" pre-img" :src =" src" alt =" " >
30
- <vue-core-image-upload :class =" ['pure-button','pure-button-primary','js-btn-crop']"
31
- :crop =" true"
32
- text =" 上传图片"
33
- url =" /api/posts/"
34
- extensions =" png,gif,jpeg,jpg"
35
- @:imageuploaded =" imageuploaded"
36
- @:errorhandle =" handleError"
37
- ></vue-core-image-upload >
29
+ <div class =" crop-demo" >
30
+ <img :src =" cropImg" class =" pre-img" >
31
+ <div class =" crop-demo-btn" >选择图片
32
+ <input class =" crop-input" type =" file" name =" image" accept =" image/*" @change =" setImage" />
33
+ </div >
34
+ </div >
35
+
36
+ <el-dialog title =" 裁剪图片" :visible.sync =" dialogVisible" width =" 30%" >
37
+ <vue-cropper ref =' cropper' :src =" imgSrc" :ready =" cropImage" :zoom =" cropImage" :cropmove =" cropImage" style =" width :100% ;height :300px ;" ></vue-cropper >
38
+ <span slot =" footer" class =" dialog-footer" >
39
+ <el-button @click =" cancelCrop" >取 消</el-button >
40
+ <el-button type =" primary" @click =" dialogVisible = false" >确 定</el-button >
41
+ </span >
42
+ </el-dialog >
38
43
</div >
39
44
</div >
40
45
</template >
41
46
42
47
<script >
43
- import VueCoreImageUpload from ' vue-core-image-upload ' ;
48
+ import VueCropper from ' vue-cropperjs ' ;
44
49
export default {
45
50
data : function (){
46
51
return {
47
- src: ' ./static/img/img.jpg' ,
48
- fileList: []
52
+ defaultSrc: ' ./static/img/img.jpg' ,
53
+ fileList: [],
54
+ imgSrc: ' ' ,
55
+ cropImg: ' ' ,
56
+ dialogVisible: false ,
49
57
}
50
58
},
51
59
components: {
52
- VueCoreImageUpload
60
+ VueCropper
53
61
},
54
62
methods: {
63
+ setImage (e ){
64
+ const file = e .target .files [0 ];
65
+ if (! file .type .includes (' image/' )) {
66
+ return ;
67
+ }
68
+ const reader = new FileReader ();
69
+ reader .onload = (event ) => {
70
+ this .dialogVisible = true ;
71
+ this .imgSrc = event .target .result ;
72
+ this .$refs .cropper && this .$refs .cropper .replace (event .target .result );
73
+ };
74
+ reader .readAsDataURL (file);
75
+ },
76
+ cropImage () {
77
+ this .cropImg = this .$refs .cropper .getCroppedCanvas ().toDataURL ();
78
+ },
79
+ cancelCrop (){
80
+ this .dialogVisible = false ;
81
+ this .cropImg = this .defaultSrc ;
82
+ },
55
83
imageuploaded (res ) {
56
84
console .log (res)
57
85
},
61
89
message: ' 图片上传接口上传失败,可更改为自己的服务器接口'
62
90
});
63
91
}
92
+ },
93
+ created (){
94
+ this .cropImg = this .defaultSrc ;
64
95
}
65
96
}
66
97
</script >
73
104
font-size : 22px ;
74
105
color : #1f2f3d ;
75
106
}
76
- .pre-img {
77
- width :250px ;
78
- height : 250px ;
79
- margin-bottom : 20px ;
107
+ .pre-img {
108
+ width : 100px ;
109
+ height : 100px ;
110
+ background : #f8f8f8 ;
111
+ border : 1px solid #eee ;
112
+ border-radius : 5px ;
113
+ }
114
+ .crop-demo {
115
+ display : flex ;
116
+ align-items : flex-end ;
117
+ }
118
+ .crop-demo-btn {
119
+ position : relative ;
120
+ width : 100px ;
121
+ height : 40px ;
122
+ line-height : 40px ;
123
+ padding : 0 20px ;
124
+ margin-left : 30px ;
125
+ background-color : #409eff ;
126
+ color : #fff ;
127
+ font-size : 14px ;
128
+ border-radius : 4px ;
129
+ box-sizing : border-box ;
130
+ }
131
+ .crop-input {
132
+ position : absolute ;
133
+ width : 100px ;
134
+ height : 40px ;
135
+ left : 0 ;
136
+ top : 0 ;
137
+ opacity : 0 ;
138
+ cursor : pointer ;
80
139
}
81
140
</style >
0 commit comments