Skip to content

Commit d1bd983

Browse files
committed
'完成图片裁剪功能'
1 parent bc07a50 commit d1bd983

File tree

2 files changed

+79
-20
lines changed

2 files changed

+79
-20
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"element-ui": "2.3.3",
1616
"mavon-editor": "^2.5.2",
1717
"vue": "^2.5.16",
18-
"vue-core-image-upload": "2.1.11",
18+
"vue-cropperjs": "^2.2.0",
1919
"vue-datasource": "1.0.12",
2020
"vue-quill-editor": "3.0.6",
2121
"vue-router": "^3.0.1",

src/components/page/Upload.vue

Lines changed: 78 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,63 @@
2323
</el-upload>
2424
<div class="content-title">支持裁剪</div>
2525
<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>
2828
</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>
3843
</div>
3944
</div>
4045
</template>
4146

4247
<script>
43-
import VueCoreImageUpload from 'vue-core-image-upload';
48+
import VueCropper from 'vue-cropperjs';
4449
export default {
4550
data: function(){
4651
return {
47-
src: './static/img/img.jpg',
48-
fileList: []
52+
defaultSrc: './static/img/img.jpg',
53+
fileList: [],
54+
imgSrc: '',
55+
cropImg: '',
56+
dialogVisible: false,
4957
}
5058
},
5159
components: {
52-
VueCoreImageUpload
60+
VueCropper
5361
},
5462
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+
},
5583
imageuploaded(res) {
5684
console.log(res)
5785
},
@@ -61,6 +89,9 @@
6189
message: '图片上传接口上传失败,可更改为自己的服务器接口'
6290
});
6391
}
92+
},
93+
created(){
94+
this.cropImg = this.defaultSrc;
6495
}
6596
}
6697
</script>
@@ -73,9 +104,37 @@
73104
font-size: 22px;
74105
color: #1f2f3d;
75106
}
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;
80139
}
81140
</style>

0 commit comments

Comments
 (0)