最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中使用cropperjs的方法

 更新時(shí)間:2018年03月01日 11:17:19   作者:小禾子_Jane  
這篇文章給大家總結(jié)了在.vue文件里cropperjs的使用方法和經(jīng)驗(yàn)教訓(xùn),感興趣的朋友跟隨腳本之家小編學(xué)習(xí)吧

用vue的項(xiàng)目里需要對(duì)圖片進(jìn)行裁剪,于是使用了cropperjs,在使用的過程中也踩過一些坑,以下是在.vue文件里cropperjs的使用方法和經(jīng)驗(yàn)教訓(xùn)總結(jié):

在使用之前,先引入:

這里寫圖片描述

在項(xiàng)目里,運(yùn)行:

npm install cropperjs -save

在template里:

<div id="demo"> 
  <!-- 遮罩層 --> 
  <div class="container" v-show="panel"> 
   <div> 
    <img id="image" :src="url" alt="Picture"> 
   </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> 

這里寫圖片描述

js代碼:

import Cropper from 'cropperjs' 
export default { 
 components: { 
 }, 
 data () { 
  return { 
   headerImage:'', 
   picValue:'', 
   cropper:'', 
   croppable:false, 
   panel:false, 
   url:'' 
  } 
 }, 
 mounted () { 
  //初始化這個(gè)裁剪框 
  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 () { 
   //這邊寫圖片的上傳 
  } 
 } 
} 

整體效果:

這里寫圖片描述

css代碼(比較長,本來想不貼上了,但是為了一下童鞋可以直接運(yùn)行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; 
}

整體圖:

這里寫圖片描述

把以上這些代碼放入你的項(xiàng)目,或者單獨(dú)建個(gè).vue放進(jìn)項(xiàng)目,就可以實(shí)現(xiàn)這樣的效果:

這里寫圖片描述

總結(jié)

以上所述是小編給大家介紹的vue中使用cropperjs的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • js如何編寫簡單的ajax方法庫

    js如何編寫簡單的ajax方法庫

    這篇文章主要為大家詳細(xì)介紹了js如何編寫簡單的ajax方法庫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • JS中的回調(diào)函數(shù)(callback)講解

    JS中的回調(diào)函數(shù)(callback)講解

    回調(diào)函數(shù)是一段可執(zhí)行的代碼段,它作為一個(gè)參數(shù)傳遞給其他的代碼,其作用是在需要的時(shí)候方便調(diào)用這段(回調(diào)函數(shù))代碼,這篇文章主要介紹了JS中的?回調(diào)函數(shù)(callback),需要的朋友可以參考下
    2022-12-12
  • 微信小程序 如何引入外部字體庫iconfont的圖標(biāo)

    微信小程序 如何引入外部字體庫iconfont的圖標(biāo)

    這篇文章主要為大家詳細(xì)介紹了微信小程序引入外部字體庫iconfont圖標(biāo)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列原理與用法實(shí)例詳解

    JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列原理與用法實(shí)例詳解

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列原理與用法,較為詳細(xì)的說明了隊(duì)列的概念、原理,并結(jié)合實(shí)例形式分析了javascript實(shí)現(xiàn)與使用隊(duì)列的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • JavaScript事件處理程序詳解

    JavaScript事件處理程序詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript事件處理程序的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 前端的框架TDesign小程序組件庫體驗(yàn)

    前端的框架TDesign小程序組件庫體驗(yàn)

    TDesign是騰訊各業(yè)務(wù)團(tuán)隊(duì)在服務(wù)業(yè)務(wù)過程中沉淀的一套企業(yè)級(jí)設(shè)計(jì)體系,下面這篇文章主要給大家介紹了關(guān)于前端的框架TDesign小程序組件庫體驗(yàn)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • JavaScript前端實(shí)現(xiàn)頁面白屏檢測(cè)與解決

    JavaScript前端實(shí)現(xiàn)頁面白屏檢測(cè)與解決

    白屏通常指的是頁面打開后,瀏覽器上面的地址欄已經(jīng)顯示完整的?URL,但是頁面內(nèi)容無法渲染,只有白色的空白頁面,下面我們就來看看白屏出現(xiàn)的具體原因與解決方法吧
    2025-03-03
  • JS實(shí)現(xiàn)仿百度輸入框自動(dòng)匹配功能的示例代碼

    JS實(shí)現(xiàn)仿百度輸入框自動(dòng)匹配功能的示例代碼

    本篇文章主要是對(duì)JS實(shí)現(xiàn)仿百度輸入框自動(dòng)匹配功能的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • 微信小程序基于canvas漸變實(shí)現(xiàn)的彩虹效果示例

    微信小程序基于canvas漸變實(shí)現(xiàn)的彩虹效果示例

    這篇文章主要介紹了微信小程序基于canvas漸變實(shí)現(xiàn)的彩虹效果,結(jié)合實(shí)例形式分析了微信小程序線性漸變及圓形漸變的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • js實(shí)現(xiàn)上傳圖片并顯示圖片名稱

    js實(shí)現(xiàn)上傳圖片并顯示圖片名稱

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)上傳圖片并顯示圖片名稱,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評(píng)論

湟中县| 泸水县| 亚东县| 密山市| 平远县| 年辖:市辖区| 天长市| 宜章县| 女性| 清水县| 囊谦县| 无极县| 云阳县| 平山县| 博白县| 门头沟区| 石嘴山市| 平度市| 潼南县| 林甸县| 沅陵县| 辛集市| 阿尔山市| 赫章县| 重庆市| 河北区| 上虞市| 平顺县| 泽州县| 玛多县| 三江| 通辽市| 铁岭县| 商河县| 页游| 竹北市| 大荔县| 东兴市| 土默特左旗| 黄平县| 福泉市|