亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

vue中使用cropperjs的方法

2024-05-06 16:42:44
字體:
來源:轉載
供稿:網友

用vue的項目里需要對圖片進行裁剪,于是使用了cropperjs,在使用的過程中也踩過一些坑,以下是在.vue文件里cropperjs的使用方法和經驗教訓總結:

在使用之前,先引入:

vue使用cropper.js,vue,cropperjs

在項目里,運行:

npm install cropperjs -save

在template里:

<div id="demo">   <!-- 遮罩層 -->   <div class="container" v-show="panel">    <div>     <img id="image" :src="url"   </div>   <button type="button" id="button" @click="crop">確定</button>  </div>   <div style="padding:20px;">     <div class="show">      <div class="picture" :style="'backgroundImage:url('+headerImage+')'">      </div>     </div>    <div style="margin-top:20px;">      <input type="file" id="change" accept="image" @change="change">      <label for="change"></label>     </div>   </div>  </div> 

vue使用cropper.js,vue,cropperjs

js代碼:

import Cropper from 'cropperjs' export default {  components: {  },  data () {   return {    headerImage:'',    picValue:'',    cropper:'',    croppable:false,    panel:false,    url:''   }  },  mounted () {   //初始化這個裁剪框   var self = this;   var image = document.getElementById('image');   this.cropper = new Cropper(image, {    aspectRatio: 1,    viewMode: 1,    background:false,    zoomable:false,    ready: function () {     self.croppable = true;    }   });  },  methods: {   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 ;   },   change (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);    }    this.panel = true;   },   crop () {     this.panel = false;     var croppedCanvas;     var roundedCanvas;     if (!this.croppable) {      return;     }     // Crop     croppedCanvas = this.cropper.getCroppedCanvas();     console.log(this.cropper)     // Round     roundedCanvas = this.getRoundedCanvas(croppedCanvas);     this.headerImage = roundedCanvas.toDataURL();     this.postImg()   },   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';    context.beginPath();    context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true);    context.fill();    return canvas;   },   postImg () {    //這邊寫圖片的上傳   }  } } 

整體效果:

vue使用cropper.js,vue,cropperjs

css代碼(比較長,本來想不貼上了,但是為了一下童鞋可以直接運行demo,還是貼上了,篇幅過長,望見諒):

*{  margin: 0;  padding: 0; } #demo #button {  position: absolute;  right: 10px;  top: 10px;  width: 80px;  height: 40px;  border:none;  border-radius: 5px;  background:white; } #demo .show {  width: 100px;  height: 100px;  overflow: hidden;  position: relative;  border-radius: 50%;  border: 1px solid #d5d5d5; } #demo .picture {  width: 100%;  height: 100%;  overflow: hidden;  background-position: center center;  background-repeat: no-repeat;  background-size: cover;  } #demo .container {   z-index: 99;   position: fixed;   padding-top: 60px;   left: 0;   top: 0;   right: 0;   bottom: 0;   background:rgba(0,0,0,1); }#demo #image {  max-width: 100%; }.cropper-view-box,.cropper-face {  border-radius: 50%; } /*!  * Cropper.js v1.0.0-rc  * https://github.com/fengyuanchen/cropperjs  *  * Copyright (c) 2017 Fengyuan Chen  * Released under the MIT license  *  * Date: 2017-03-25T12:02:21.062Z  */.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; }

整體圖:

vue使用cropper.js,vue,cropperjs

把以上這些代碼放入你的項目,或者單獨建個.vue放進項目,就可以實現這樣的效果:

vue使用cropper.js,vue,cropperjs

總結

以上所述是小編給大家介紹的vue中使用cropperjs的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线色戒在线| 欧美电影免费观看高清| 国产精品久久久久av免费| 一区二区三区视频免费| 欧美黄网免费在线观看| 在线免费看av不卡| 国产欧美日韩免费| 久久久99免费视频| 亚洲欧美激情在线视频| 69**夜色精品国产69乱| 疯狂做受xxxx高潮欧美日本| 久久久亚洲网站| 精品无人区乱码1区2区3区在线| 欧洲成人免费aa| 国产99久久精品一区二区 夜夜躁日日躁| 日本欧美精品在线| 色偷偷偷亚洲综合网另类| 亚洲国产精品成人av| 国产伊人精品在线| 国产精品日韩电影| 欧美日韩国产成人在线观看| 亚洲白拍色综合图区| 92看片淫黄大片看国产片| 国产成人avxxxxx在线看| 成人激情视频在线播放| 91免费欧美精品| 国产精品爱久久久久久久| 久久久久久午夜| 亚洲美女在线视频| 亚洲成人免费在线视频| 国产视频亚洲视频| 亚洲欧洲一区二区三区在线观看| 国产在线观看一区二区三区| 国产性猛交xxxx免费看久久| 九九热精品视频在线播放| 国产精品综合网站| 欧美重口另类videos人妖| 欧美一区二区三区艳史| 亚洲男人天堂网| 亚洲变态欧美另类捆绑| 最近2019中文字幕mv免费看| 精品国偷自产在线视频99| 96精品久久久久中文字幕| 青草热久免费精品视频| 日韩欧美亚洲成人| 亚洲欧美日韩国产精品| 精品亚洲精品福利线在观看| 亚洲黄页网在线观看| 亚洲精品国产精品久久清纯直播| 日韩欧美一区二区在线| 欧美大片va欧美在线播放| 国产精品欧美激情在线播放| 国产91ⅴ在线精品免费观看| 亚洲色图综合网| 久久99精品久久久久久青青91| 欧美电影免费观看高清| 久久久久国色av免费观看性色| 欧美第一页在线| 国产精品69精品一区二区三区| 97成人精品视频在线观看| 中文字幕在线视频日韩| 日本三级韩国三级久久| 国产成人在线播放| 欧美主播福利视频| 91色精品视频在线| 欧美xxxx14xxxxx性爽| 在线观看欧美日韩| 国产高清视频一区三区| 啊v视频在线一区二区三区| 一区二区三区 在线观看视| 欧美日韩另类视频| 国产偷国产偷亚洲清高网站| 亚洲国产成人av在线| 久久中文字幕在线视频| 久久久精品在线| 久久久久成人网| 97精品久久久| 亚洲欧美中文日韩在线| 亚洲国产成人在线视频| 精品国产乱码久久久久久虫虫漫画| 久久久精品视频成人| 国内精品久久久久久中文字幕| 欧美孕妇毛茸茸xxxx| 久久久久女教师免费一区| 久久国产精品影视| 亚洲黄色www网站| 亚洲国产精品悠悠久久琪琪| 欧美激情精品久久久久久免费印度| 国产福利视频一区二区| 日韩在线资源网| 奇门遁甲1982国语版免费观看高清| 在线看福利67194| 欧美一级大片在线观看| 成人精品aaaa网站| 欧美精品xxx| 久久男人资源视频| 国产在线视频欧美| 日韩亚洲国产中文字幕| 国产亚洲精品一区二区| 九九久久综合网站| 九九视频这里只有精品| 欧美亚洲成人xxx| 日韩高清电影好看的电视剧电影| 日韩a**中文字幕| 亚洲综合av影视| 日韩精品中文字幕在线观看| 最新日韩中文字幕| 欧美中文字幕在线观看| 久久亚洲精品一区| 热99精品只有里视频精品| 亚洲欧美在线磁力| 精品呦交小u女在线| 国产91|九色| 日本久久久久亚洲中字幕| 精品香蕉在线观看视频一| 国产成人在线一区二区| 最近2019年手机中文字幕| 亚洲精品视频免费| 国产精品午夜国产小视频| 91香蕉嫩草神马影院在线观看| 久久九九有精品国产23| 亚洲夜晚福利在线观看| www.日韩系列| 久久欧美在线电影| 成人在线中文字幕| 国产成人精品综合久久久| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲韩国欧洲国产日产av| 国内精品400部情侣激情| 国产精品欧美在线| 一区二区三区 在线观看视| 亚洲天堂开心观看| 2019中文字幕在线| 亚洲国产成人精品女人久久久| 在线播放日韩av| 欧美大片网站在线观看| 88xx成人精品| 97av在线视频| 中文字幕少妇一区二区三区| 亚洲综合中文字幕68页| 亚洲欧美中文字幕在线一区| 欧美亚洲另类制服自拍| 欧美日韩黄色大片| 国产精品va在线播放我和闺蜜| 91精品视频免费| 色婷婷综合久久久久| 亚洲欧美国产日韩中文字幕| 国产亚洲欧美日韩美女| 国产91精品久久久久| 成人免费在线网址| 亚洲午夜未删减在线观看| 在线成人一区二区| 国产福利视频一区| 亚洲欧美日韩天堂一区二区| 国内外成人免费激情在线视频网站| 久久久久成人网| 国产91在线播放| 日韩中文字幕国产| 欧美成人在线免费视频| 欧美剧在线观看| 久久久久久免费精品| 久久精品久久久久电影| 亚洲激情小视频| 91极品视频在线|