github地址:https://github.com/yinzhida/vue-crop

git clone: https://github.com/yinzhida/vue-crop.git

这个小项目最近更新到了第2版,虽然还有很多不足,还是分享给大家。

简介

vue-crop是一个用于标记矩形选框位置的小插件(类似于jcrop)。不同于现有的大部分cropper的地方在于:它不与图片裁剪功能耦合,而是更专注于标记选框位置。这使它可以在更多的标记需求中得到应用。比如:图像/视频切割,绘制矩形标记。

实现功能

功能包括,绘制矩形选框,设定选区的最大最小宽高,自定义比例绘制等等。

实现原理

乍一看去,这个插件的功能还是比较简单。但是实际编写的时候发现还是有一些小的技巧的。比如,如何定义选区,以及如何定义用户拖拽选区的行为:

    // horizontal 简写h 代表横向, vertical 简写v 代表纵向
// 分成两路,一路先横着走,然后竖着走,另外一路先竖着走,再横着走,
// 最后都从start到达end
// x1,y1 hv1 hv2
// 口-----口-----口
// |start |
// | |
// 口vh1 口 hv3
// | |
// | |
// 口-----口-----口 end
// vh2 vh3 x2,y2

在这种起点与终点设定的基础上,确定等比例缩放的默认方向时,就需要识别出固定方向(默认修改:右、下)的坐标名称,这个过程比较复杂。第2版的修改主要是增加了每次用户拖动以修改选区时,对选框起点和终点进行重排的操作。重排保证了用户拖拽的方向始终为终点所在的方向,降低了编程的复杂度。如上图,用户拖拽hv2以后,则重排如下:

    // 重排后用户拖拽的点只改变终点的方向。
// vh2 vh3 end
// 口-----口-----口x2,y2
// | |
// | |
// 口vh1 口 hv3
// | |
// |x1,y1 |
// 口-----口-----口
// start hv1 hv2

这样设定以后,每次修改,需要校验的就只有x2,y2这两点的坐标。

对此插件有兴趣的同学可以在github的项目中交流。

基于vue的cropper插件编写分享的更多相关文章

  1. 基于vue的分页插件

    相信大家用过很多jquery的分页插件,那这次就用一用基于vue的分页插件. 这里的环境用的是springboot 首先要引入pagehelper的jar文件,版本是1.2.3,配置文件也需要配置一下 ...

  2. 推荐几款基于vue的使用插件

    1.muse-ui ★6042 - 三端样式一致的响应式 UI 库 2.vuetify ★11169 - 为移动而生的Vue JS 2组件框架 3.Vux ★12969- 基于Vue和WeUI的组件库 ...

  3. 基于Jquery、JqueryUI插件编写

    刚开始编写jquery插件的时候,只是从网上找个模板看着写,并不理解.刚刚仔细把官网的API看了下,突然觉得豁然开朗了.马上放假了想着应该整理整理不然忘了又. How to create a Jque ...

  4. 基于vue+leaflet+echart的足迹分享评论平台

    (其实题目是随便取的,目的只是用来证明Vue+leaflet+springboot技术栈的可行性) 效果 小专栏不支持上传视频?想看的话可以去我的知乎看最新的文章,那个应该可以.在这里 主要功能描述 ...

  5. vue插件编写与实战

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 热爱vue开发的同学肯定知道awesome-vue 这个github地址,里面包含了数以千计的vue ...

  6. 基于 Vue BootStrap的迷你Chrome插件

    代码地址如下:http://www.demodashi.com/demo/14306.html 安装 安装 Visual Studio Code 和Chrome, 自行FQ 详细安装这里略过 安装包管 ...

  7. jq动画插件,自制基于vue的圆形时钟

    首先附上jq插件库,里面的东西太炫了,建议学前端的可以看看学习下:http://www.jq22.com/ 里面有个“超个性动画版本的个人简历”,通过屏幕上不断打印内容,改变相应样式来实现动画简历,我 ...

  8. Vue插件编写、用法详解(附demo)

    Vue插件编写.用法详解(附demo) 1.概述 简单来说,插件就是指对Vue的功能的增强或补充. 比如说,让你在每个单页面的组件里,都可以调用某个方法,或者共享使用某个变量,或者在某个方法之前执行一 ...

  9. 基于Vue.js的Web视频播放器插件vue-vam-video@1.3.6 正式发布

    前言 今日正式发布一款基于Vue.js的Web视频播放器插件.可配置,操作灵活.跟我一起来体验吧! 线上地址体验 基于vue3.0和vue-vam-video,我开发了一款在线视频播放器. 网址: h ...

随机推荐

  1. EffectiveJava-2

    一.使用类库 使用类库的好处: 无须关心方法是如何实现的,由算法专家花了大量时间设计.实现和测试这个方法,不仅保证了正确性,而且一旦有缺陷,下一个版本就会修复. 不必浪费时间为哪些与工作不太相关的问题 ...

  2. 使用Typescript重构axios(十五)——默认配置

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  3. python机器学习——随机梯度下降

    上一篇我们实现了使用梯度下降法的自适应线性神经元,这个方法会使用所有的训练样本来对权重向量进行更新,也可以称之为批量梯度下降(batch gradient descent).假设现在我们数据集中拥有大 ...

  4. egret常用功能

    egret常用功能<pre>//////////////////////////////////////////////////////////////////////////////// ...

  5. Python 基础之re 模块

    Python 基础之大话 re 在使用re模块中主要会用到一下几个方法: re.match() #从头匹配一个字符串 re.search() #浏览全部字符串,匹配第一个符合规则的字符串 re.fin ...

  6. canvas画圆环%显示

    我: JS代码:  function circleProgress(id,value,average){  var canvas = document.getElementById(id);  var ...

  7. kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用

    1. Ratel是什么? Ratel是一个Kubernetes资源平台,基于管理Kubernetes的资源开发,可以管理Kubernetes的Deployment.DaemonSet.Stateful ...

  8. (C#)WPF:.h(头文件)、.lib(静态链接库文件)和.dll(动态链接库文件)之间的区别与联系

    静态链接库(Lib)与动态链接库(DLL)的区别 静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件:动态链接就是把调用的函数所在文件模块(DLL)和 ...

  9. 一文看懂 K8s 日志系统设计和实践

    上一篇中我们介绍了为什么需要一个日志系统.为什么云原生下的日志系统如此重要以及云原生下日志系统的建设难点,相信DevOps.SRE.运维等同学看了是深有体会的.本篇文章单刀直入,会直接跟大家分享一下如 ...

  10. pat 1065 A+B and C (64bit)(20 分)(大数, Java)

    1065 A+B and C (64bit)(20 分) Given three integers A, B and C in [−2​63​​,2​63​​], you are supposed t ...