<template>
????<div?id="photoTwo">
??????<!--?遮罩層?-->
??????<div?class="father"?v-show="panel">
????????????<div?class="containerTwo">
????????????????<div?id="cropper"?style="margin-top:1%;margin-left:?1%;margin-right:?1%;height:?85%;margin-bottom:?1%;padding:1px;">
????????????????????<img?id="imageTwo"?:src="url"?alt="Picture">
????????????????</div>
????????????????<div>
????????????????????<div?style="float:right;margin-right:1%;">
????????????????????????<select?v-model="aspectRatioSelect"?@change="aspectRatio(aspectRatioSelect)"?size="mini"?class="aspect"?style="width:?80px">
????????????????????????????<option?:label="'1/2'"?:value="0.5"></option>
????????????????????????????<option?:label="'1/1'"?:value="1"></option>
????????????????????????????<option?:label="'3/2'"?:value="1.5"></option>
????????????????????????????<option?:label="'2/1'"?:value="2"></option>
????????????????????????????<option?:label="'5/2'"?:value="2.5"></option>
????????????????????????????<option?:label="'3/1'"?:value="3"></option>
????????????????????????</select>
????????????????????????<el-button?icon="el-icon-zoom-out"?@click="zoom(-1)"?size="mini"?circle></el-button>
????????????????????????<el-button?icon="el-icon-zoom-in"?@click="zoom(1)"?size="mini"?circle></el-button>
????????????????????????<el-button?icon="el-icon-refresh"?@click="rotate"?size="mini"?circle></el-button>
????????????????????????<el-button?type="success"?icon="el-icon-check"?@click="crop2"?size="mini"?circle></el-button>
????????????????????????<el-button?type="danger"?icon="el-icon-close"?@click="cancelPanel"?size="mini"?circle></el-button>
????????????????????</div>
????????????????</div>
????????????</div>
????????</div>
??????<div>
????????<div>
??????????<input?type="file"?id="changeTwo"?accept=".jpg,.jpeg,.gif,.png,.bmp"?@change="changeTwo"??style="display:none;">
??????????<div??class="show"
??????????????????v-on:mouseover="addClassload()"
??????????????????v-on:mouseout="removeClassload()"
??????????????????@click="upload()"
??????????????????:style="'backgroundImage:url('+headerImageTwo+');border:?1px?dashed?'+color">
????????????????<i?class="el-icon-plus?i"?:style="'color:?'+color"></i>
????????????</div>
????????</div>
??????</div>
????</div>
</template>
<script>
??import?Cropper?from?'cropperjs';
??export?default?{
????props:['headerImageTwo'],
????components:?{
????},
????data?()?{
??????return?{
????????picValue:'',
????????cropper:'',
????????aspectRatioSelect:1,
????????croppable:false,
????????panel:false,
????????url:null,
????????current:0,
????????color:"#d9d9d9"
??????}
????},
????mounted?()?{
??????//初始化這個(gè)裁剪框
??????var?self?=?this;
??????var?image?=?document.getElementById('imageTwo');
??????this.cropper?=?new?Cropper(image,?{
????????aspectRatio:?1,
????????viewMode:?1,
????????zoomOnWheel:false,//是否允許通過(guò)鼠標(biāo)滾輪來(lái)縮放圖片
????????background:true,//是否在容器上顯示網(wǎng)格背景
????????rotatable:true,//是否允許旋轉(zhuǎn)圖片
????????ready:?function?()?{
??????????self.croppable?=?true;
????????}
??????});
????},
????methods:?{
????????addClassload(bool){
????????????????this.?color="#1b95e0"
????????????},
????????????removeClassload(bool){
????????????????this.?color="#d9d9d9"
????????????},
????????????//縮放
????????????zoom(num){
????????????????num?=?num?||?1;
????????????????this.cropper.zoom(num);
????????????},
????????????//旋轉(zhuǎn)
????????????rotate(){
????????????????this.current?=?(this.current+90)%360;
????????????????this.cropper.rotate(this.current);
????????????},
????????????crop2?()?{?????????????
????????????????var?croppedCanvas;
????????????????var?roundedCanvas;
????????????????if?(!this.croppable)?{
????????????????????return;
????????????????}
????????????????//?Crop
????????????????croppedCanvas?=?this.cropper.getCroppedCanvas();
????????????????//方形
????????????????var?picBase=croppedCanvas.toDataURL();???????????????
????????????????this.$emit("changeHeaderImage",picBase);
????????????????var??gettype=Object.prototype.toString;
????????????????this.url="";
????????????????this.panel?=?false;
????????????????this.$emit('handleAvatarSuccess',picBase);
????????????},
????????//點(diǎn)擊按鈕自動(dòng)執(zhí)行選擇文件事件
????????????upload(bool){
????????????????this.url=null;
????????????????this.current=0;
????????????????this.aspectRatio(this.aspectRatioSelect=1);
????????????????document.getElementById("changeTwo").value=null;
????????????????document.getElementById("changeTwo").click();
????????????},
????????????cancelPanel(){
??????????????this.url=null;
??????????????this.panel=false;
????????????},
??????getObjectURL?(file)?{
????????var?url?=?null?;
????????if?(window.createObjectURL!=undefined)?{?//?basic
??????????url?=?window.createObjectURL(file)?;
????????}?else?if?(window.URL!=undefined)?{?//?mozilla(firefox)
??????????url?=?window.URL.createObjectURL(file)?;
????????}?else?if?(window.webkitURL!=undefined)?{?//?webkit?or?chrome
??????????url?=?window.webkitURL.createObjectURL(file)?;
????????}
????????return?url?;
??????},
??????//剪切框?qū)捀弑?/p>
??????aspectRatio(num){
????????this.cropper.setAspectRatio(num);
????????},
??????changeTwo?(e)?{
????????let?files?=?e.target.files?||?e.dataTransfer.files;
????????if?(!files.length)?return;
????????this.panel?=?true;
????????this.picValue?=?files[0];
????????this.url?=?this.getObjectURL(this.picValue);
????????//每次替換圖片要重新得到新的url
????????if(this.cropper){
??????????this.cropper.replace(this.url);
????????}
??????},
??????sureimg?()?{
????????var?self=this;
????????this.panel?=?false;
????????var?croppedCanvas;
????????var?roundedCanvas;
????????if?(!this.croppable)?{
??????????return;
????????}????
??????},
??????getRoundedCanvas?(sourceCanvas)?{
????????var?canvas?=?document.createElement('canvas');
????????var?context?=?canvas.getContext('2d');
????????var?width?=?sourceCanvas.width;
????????var?height?=?sourceCanvas.height;
????????canvas.width?=?width;
????????canvas.height?=?height;
????????context.imageSmoothingEnabled?=?true;
????????context.drawImage(sourceCanvas,?0,?0,?width,?height);
????????context.globalCompositeOperation?=?'destination-in';
????????//畫(huà)圓
????????//?context.beginPath();
????????//?context.arc(width?/?2,?height?/?2,?Math.min(width,?height)?/?2,?0,?2?*?Math.PI,?true);
????????//?context.fill();
????????return?canvas;
??????},
??????postImg?()?{
????????//這邊寫(xiě)圖片的上傳
????????this.$emit('imgfile',?this.headerImageTwo);
??????}
????}
??}
</script>
<style?scoped>
?*{
????????margin:?0;
????????padding:?0;
????}
????#photoTwo?.father{
????????background-color:?rgba(0,0,0,0.5);
????????position:?fixed;
????????left:0px;
????????top:0px;
????????width:100%;
????????height:100%;
????????z-index:?33;
????}
????#photoTwo?.i{
????????font-size:?28px;
????????color:?#8c939d;
????????width:?120px;
????????height:?120px;
????????line-height:?120px;
????????text-align:?center;
????}
????#photoTwo?.show?{
????????border:?1px?dashed?#d9d9d9;
????????border-radius:?10%;
????????width:?120px;
????????height:?120px;
????????cursor:?pointer;
????????position:?relative;
????????overflow:?hidden;
????????display:?inline-block;
????????text-align:?center;
????????outline:?none;
????????background-position:?center?center;
????????background-repeat:?no-repeat;
????????background-size:?cover;
????}
????#photoTwo?.containerTwo?{
????????z-index:?99;
????????height:?300px;
????????width:?500px;
????????position:?fixed;
????????/*padding-top:?60px;*/
????????left:?35%;
????????top:?20%;
????????background-color:?white;
????}
????#photoTwo?#imageTwo?{
????????max-width:?100%;
????}
????.cropper-container?{
????????font-size:?0;
????????line-height:?0;
????????position:?relative;
????????-webkit-user-select:?none;
????????-moz-user-select:?none;
????????-ms-user-select:?none;
????????user-select:?none;
????????direction:?ltr;
????????-ms-touch-action:?none;
????????touch-action:?none
????}
????.cropper-container?img?{
????????/*?Avoid?margin?top?issue?(Occur?only?when?margin-top?<=?-height)?*/
????????display:?block;
????????min-width:?0?!important;
????????max-width:?none?!important;
????????min-height:?0?!important;
????????max-height:?none?!important;
????????width:?100%;
????????height:?100%;
????????image-orientation:?0deg
????}
????.cropper-wrap-box,
????.cropper-canvas,
????.cropper-drag-box,
????.cropper-crop-box,
????.cropper-modal?{
????????position:?absolute;
????????top:?0;
????????right:?0;
????????bottom:?0;
????????left:?0;
????}
????.cropper-wrap-box?{
????????overflow:?hidden;
????}
????.cropper-drag-box?{
????????opacity:?0;
????????background-color:?#fff;
????}
????.cropper-modal?{
????????opacity:?.5;
????????background-color:?#000;
????}
????.cropper-view-box?{
????????display:?block;
????????overflow:?hidden;
????????width:?100%;
????????height:?100%;
????????outline:?1px?solid?#39f;
????????outline-color:?rgba(51,?153,?255,?0.75);
????}
????.cropper-dashed?{
????????position:?absolute;
????????display:?block;
????????opacity:?.5;
????????border:?0?dashed?#eee
????}
????.cropper-dashed.dashed-h?{
????????top:?33.33333%;
????????left:?0;
????????width:?100%;
????????height:?33.33333%;
????????border-top-width:?1px;
????????border-bottom-width:?1px
????}
????.cropper-dashed.dashed-v?{
????????top:?0;
????????left:?33.33333%;
????????width:?33.33333%;
????????height:?100%;
????????border-right-width:?1px;
????????border-left-width:?1px
????}
????.cropper-center?{
????????position:?absolute;
????????top:?50%;
????????left:?50%;
????????display:?block;
????????width:?0;
????????height:?0;
????????opacity:?.75
????}
????.cropper-center:before,
????.cropper-center:after?{
????????position:?absolute;
????????display:?block;
????????content:?'?';
????????background-color:?#eee
????}
????.cropper-center:before?{
????????top:?0;
????????left:?-3px;
????????width:?7px;
????????height:?1px
????}
????.cropper-center:after?{
????????top:?-3px;
????????left:?0;
????????width:?1px;
????????height:?7px
????}
????.cropper-face,
????.cropper-line,
????.cropper-point?{
????????position:?absolute;
????????display:?block;
????????width:?100%;
????????height:?100%;
????????opacity:?.1;
????}
????.cropper-face?{
????????top:?0;
????????left:?0;
????????background-color:?#fff;
????}
????.cropper-line?{
????????background-color:?#39f
????}
????.cropper-line.line-e?{
????????top:?0;
????????right:?-3px;
????????width:?5px;
????????cursor:?e-resize
????}
????.cropper-line.line-n?{
????????top:?-3px;
????????left:?0;
????????height:?5px;
????????cursor:?n-resize
????}
????.cropper-line.line-w?{
????????top:?0;
????????left:?-3px;
????????width:?5px;
????????cursor:?w-resize
????}
????.cropper-line.line-s?{
????????bottom:?-3px;
????????left:?0;
????????height:?5px;
????????cursor:?s-resize
????}
????.cropper-point?{
????????width:?5px;
????????height:?5px;
????????opacity:?.75;
????????background-color:?#39f
????}
????.cropper-point.point-e?{
????????top:?50%;
????????right:?-3px;
????????margin-top:?-3px;
????????cursor:?e-resize
????}
????.cropper-point.point-n?{
????????top:?-3px;
????????left:?50%;
????????margin-left:?-3px;
????????cursor:?n-resize
????}
????.cropper-point.point-w?{
????????top:?50%;
????????left:?-3px;
????????margin-top:?-3px;
????????cursor:?w-resize
????}
????.cropper-point.point-s?{
????????bottom:?-3px;
????????left:?50%;
????????margin-left:?-3px;
????????cursor:?s-resize
????}
????.cropper-point.point-ne?{
????????top:?-3px;
????????right:?-3px;
????????cursor:?ne-resize
????}
????.cropper-point.point-nw?{
????????top:?-3px;
????????left:?-3px;
????????cursor:?nw-resize
????}
????.cropper-point.point-sw?{
????????bottom:?-3px;
????????left:?-3px;
????????cursor:?sw-resize
????}
????.cropper-point.point-se?{
????????right:?-3px;
????????bottom:?-3px;
????????width:?20px;
????????height:?20px;
????????cursor:?se-resize;
????????opacity:?1
????}
????@media?(min-width:?768px)?{
????????.cropper-point.point-se?{
????????????width:?15px;
????????????height:?15px
????????}
????}
????@media?(min-width:?992px)?{
????????.cropper-point.point-se?{
????????????width:?10px;
????????????height:?10px
????????}
????}
????@media?(min-width:?1200px)?{
????????.cropper-point.point-se?{
????????????width:?5px;
????????????height:?5px;
????????????opacity:?.75
????????}
????}
????.cropper-point.point-se:before?{
????????position:?absolute;
????????right:?-50%;
????????bottom:?-50%;
????????display:?block;
????????width:?200%;
????????height:?200%;
????????content:?'?';
????????opacity:?0;
????????background-color:?#39f
????}
????.cropper-invisible?{
????????opacity:?0;
????}
????.cropper-bg?{
????????background-image:?url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');
????}
????.cropper-hide?{
????????position:?absolute;
????????display:?block;
????????width:?0;
????????height:?0;
????}
????.cropper-hidden?{
????????display:?none?!important;
????}
????.cropper-move?{
????????cursor:?move;
????}
????.cropper-crop?{
????????cursor:?crosshair;
????}
????.cropper-disabled?.cropper-drag-box,
????.cropper-disabled?.cropper-face,
????.cropper-disabled?.cropper-line,
????.cropper-disabled?.cropper-point?{
????????cursor:?not-allowed;
????}
????.aspect?input{
????????width:?100%;
????????height:?28px;
????}
</style>
在表格中使用圖片剪裁桥胞,發(fā)現(xiàn)上下不同數(shù)據(jù)點(diǎn)擊圖片上傳加載圖片的時(shí)候會(huì)出現(xiàn)樣式串?dāng)_的問(wèn)題。