欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue移動(dòng)端裁剪圖片結(jié)合插件Cropper的使用實(shí)例代碼

 更新時(shí)間:2017年07月10日 12:02:23   作者:xiaogezl  
本篇文章主要介紹了vue移動(dòng)端裁剪圖片結(jié)合插件Cropper的使用實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

之前寫了一個(gè)上傳頭像的功能模塊,以下的內(nèi)容是描述上傳頭像過程中裁剪圖片插件結(jié)合vue的一個(gè)使用。

當(dāng)然,使用就安裝 npm install cropperjs

接著再引入 import Cropper from 'cropperjs'

下面是源碼

<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> 
</template> 
 
<script> 
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 () { 
  //這邊寫圖片的上傳 
 } 
 } 
} 
</script> 
 
<style> 
*{ 
 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; 
} 
 
 
</style> 

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue-better-scroll 的使用實(shí)例代碼詳解

    vue-better-scroll 的使用實(shí)例代碼詳解

    這篇文章主要介紹了vue-better-scroll 的使用實(shí)例代碼詳解,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • vue3中的defineExpose使用示例教程

    vue3中的defineExpose使用示例教程

    這篇文章主要介紹了vue3中的defineExpose使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Vue框架+Element-ui(el-upload組件)使用http-request方法上傳文件并顯示文件上傳進(jìn)度功能

    Vue框架+Element-ui(el-upload組件)使用http-request方法上傳文件并顯示文件上傳進(jìn)度功能

    這篇文章主要介紹了Vue框架+Element-ui(el-upload組件)使用http-request方法上傳文件并顯示文件上傳進(jìn)度功能,本通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • vue組件值變化但不刷新強(qiáng)制組件刷新的問題

    vue組件值變化但不刷新強(qiáng)制組件刷新的問題

    這篇文章主要介紹了vue組件值變化但不刷新強(qiáng)制組件刷新的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue 3.0自定義指令的使用入門

    Vue 3.0自定義指令的使用入門

    在 Vue 的項(xiàng)目中,我們經(jīng)常會(huì)遇到 v-if、v-show、v-for 或 v-model 這些內(nèi)置指令,它們?yōu)槲覀兲峁┝瞬煌墓δ堋3耸褂眠@些內(nèi)置指令之外,Vue 也允許注冊(cè)自定義指令。接下來,將使用Vue 3官方文檔自定義指令章節(jié)中使用的示例,來一步步揭開自定義指令背后的秘密。
    2021-05-05
  • 應(yīng)用provide與inject刷新Vue頁面方法

    應(yīng)用provide與inject刷新Vue頁面方法

    這篇文章主要介紹了應(yīng)用provide與inject刷新Vue頁面的兩種方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,多多進(jìn)步,祝大家早日升職加薪
    2021-09-09
  • vue中引入mxGraph的步驟詳解

    vue中引入mxGraph的步驟詳解

    本文分步驟給大家介紹了vue中引入mxGraph的方法,非常不錯(cuò),給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue3.0透傳屬性和事件的使用方式舉例

    vue3.0透傳屬性和事件的使用方式舉例

    這篇文章主要給大家介紹了關(guān)于vue3.0透傳屬性和事件使用的相關(guān)資料,透傳attribute指的是傳遞給一個(gè)組件,卻沒有被該組件聲明為props或emits的attribute或者v-on事件監(jiān)聽器,需要的朋友可以參考下
    2024-01-01
  • vue-router定義元信息meta操作

    vue-router定義元信息meta操作

    這篇文章主要介紹了vue-router定義元信息meta操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 在vue中使用screenfull?依賴,實(shí)現(xiàn)全屏組件方式

    在vue中使用screenfull?依賴,實(shí)現(xiàn)全屏組件方式

    這篇文章主要介紹了在vue中使用screenfull?依賴,實(shí)現(xiàn)全屏組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論