vue中使用cropperjs

这次给大家带来vue中如何使用cropperjs,vue中使用cropperjs的注意事项有哪些,下面就是实战案例,一起来看一下。

用vue的项目里需要对图片进行裁剪,于是使用了cropperjs,在使用的过程中也踩过一些坑,以下是在.vue文件里cropperjs的使用方法和经验教训总结:

在使用之前,先引入:

这里写图片描述

在项目里,运行:

npm install cropperjs -save

登录后复制

在template里:

Picture

登录后复制

这里写图片描述

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 () {    //这边写图片的上传   }  } }

登录后复制

整体效果:

这里写图片描述

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; }

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

怎样实现微信web端后退强制刷新

用js快速的获取html页面中图片的地址

设置cookie过期自动更新和自动获取

立即学习“前端免费学习笔记(深入)”;

以上就是vue中使用cropperjs的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2781516.html

(0)
上一篇 2025年3月8日 16:18:35
下一篇 2025年2月22日 13:46:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Immutable及React应该如何使用

    这次给大家带来Immutable及React应该如何使用,Immutable及React使用的注意事项有哪些,下面就是实战案例,一起来看一下。 Immutable 可以给 React 应用带来数十倍的提升,也有人说 Immutable 的引…

    2025年3月8日
    200
  • js怎么做出撤销重做功能

    这次给大家带来js怎么做出撤销重做功能,js做出撤销重做功能的注意事项有哪些,下面就是实战案例,一起来看一下。 浏览器的功能越来越强大,许多原来由其他客户端提供的功能渐渐转移到了前端,前端应用也越来越复杂。许多前端应用,尤其是一些在线编辑软…

    2025年3月8日
    200
  • JS脚本加载后再执行相应回调函数的操作

    这次给大家带来JS脚本加载后再执行相应回调函数的操作,JS脚本加载后再执行相应回调函数的注意事项有哪些,下面就是实战案例,一起来看一下。 项目中经常会遇到这样的问题:当某个 js 脚本加载完成后再执行相应任务,但很多朋友可能并不知道怎么判断…

    编程技术 2025年3月8日
    200
  • JS怎样操作改变radio的状态

    这次给大家带来JS怎样操作改变radio的状态,JS操作改变radio的状态的注意事项有哪些,下面就是实战案例,一起来看一下。 h5的radio是自带选中状态改变的,但是如果自带的状态无法满足自己的需求时,就需要自己去实现。 代码如下: h…

    2025年3月8日 编程技术
    200
  • JS做到复制内容到剪贴板

    这次给大家带来JS做到复制内容到剪贴板,JS做到复制内容到剪贴板的注意事项有哪些,下面就是实战案例,一起来看一下。 常见方法 查了一下万能的Google,现在常见的方法主要是以下两种: 第三方库:clipboard.js原生方法:docum…

    2025年3月8日
    200
  • ExtJs整合的Echarts

    这次给大家带来ExtJs整合的Echarts,使用ExtJs整合Echarts的注意事项有哪些,下面就是实战案例,一起来看一下。 由于Echarts不提供表格功能,想要实现上图下表,需要自己增加一个table标签。 ExtJs整合Echar…

    编程技术 2025年3月8日
    200
  • D3.js 绘制动态进度条

    这次给大家带来D3.js 绘制动态进度条,D3.js 绘制动态进度条的注意事项有哪些,下面就是实战案例,一起来看一下。 D3 是什么 D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档。听名…

    2025年3月8日 编程技术
    200
  • JS中的Array filter() 方法如何使用

    这次给大家带来JS中的Array filter() 方法如何使用,使用JS中的Array filter()方法的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是稀疏数组     数组元素的索引不一定要连续的,它们之间可以有空缺。每个…

    编程技术 2025年3月8日
    200
  • JS做出均匀的抛物线动画

    这次给大家带来JS做出均匀的抛物线动画,JS做出均匀的抛物线动画的注意事项有哪些,下面就是实战案例,一起来看一下。 在做无人便利小程序的项目中,某一天产品说要像某产商产品学习,给添加购物车增加抛物线小球动画。好吧,产品你最大,做! 先给大家…

    2025年3月8日
    200
  • 用JS做计算题

    这次给大家带来用JS做计算题,用JS做计算题的注意事项有哪些,下面就是实战案例,一起来看一下。 我们先来看下运行后的效果: 接下来我们分享给大家全部代码: document /*计算器的style*/ .jisuanqi { width: …

    2025年3月8日
    200

发表回复

登录后才能评论