使用fabricjs实现图形编辑器

一、fabricjs的引用

1.可以直接通过script引入

2.通过npm安装

  1)npm install fabricjs

  2)在需要使用的地方导入  import { fabric } from ‘fabric‘

  

  然后就可以使用fabric来对canvas画布进行图形的编辑

二、fabricjs的使用

1.将图层从外部拖入画布中

.设置元素为可拖放,将draggable属性设置为true

 

.dataTransfer.setData() 是用于设置拖动数据的数据类型和值,第一个参数一般都是为文本text,第二个参数是被拖动对象的id,也可不设置

.绑定ondragover事件(规定元素要放到何处)和ondrop(元素放置)

注意:ondragover事件是必须要的,不然会识别不了放置的位置,详细可了解菜鸟教程上的解说http://www.runoob.com/html/html5-draganddrop.html

以上代码在绑定拖动事件的时候有if判断是为了限制拖拽放置的容器,让左右两边的拖拽互不影响

在drop需要放置的事件中调用fabricjs的添加图片的方法,left和top就是你要把被拖元素放置在画布上的位置

添加成功后图形就可以进行平移、缩放、旋转等基本操作

3.复制、粘贴、剪切、撤销、重做

参考https://www.cnblogs.com/lfqcode/p/8601605.html,剪切的原理和复制类似,不同的是剪切的时候要将该对象从画布上移除

撤销重做可参考https://jsfiddle.net/abhi47/rwdpf3nL/29/

4.通过拖动改变图层层级关系

1)首先通过vue的数据双向绑定将左中右三部分联系起来,从左边拖动图形到画布的时候,右边数据列相应发生改变,在对右边进行拖动改变图层层级的时候,右边数据列的顺序发生变化的同时画布图层层级也跟着变化

这时候可以封装一个方法,用来更新右边数据列的信息

操作右边区域的拖拽和左边的一样,但是要限制所拖拽后要放置的容器,不然会出现右边的可以拖放到画布的情况,所以在绑定拖动事件的时候才会有判断的情况

2)处理右边拖动事件的第一步和左边的一致,先设置元素为可拖动,然后要让图层拖动到空白区域才能放置

这时候需要考虑几个问题(因为后面无论是更新数据列还是更新画布图层的层级关系,都是需要用到索引的,所以以下情况都是使用索引值):

第一,需要记录被拖目标对象的索引

第二,需要记录最终放置在哪个位置

第三,确定好放置位置后数据列顺序改变,同时画布图层层级也变化

现在就按照上面的问题一步一步解决:

第一,给右边每条数据上绑定一个自定义属性data-orig,值为数组的index,这是数组用index属性是为了记录数据的原始状态,因为在页面展示的时候是倒序显示的

(该数组的数据更新在左边拖图形到画布的时候同步更新了)

第二,因为要实现元素拖动空白区域才能让其放置,这时可以在每条记录之中添加一个p标签,然后设置opacity为0

同时绑定一个自定义属性,值也是数组的index,然后怎么获取呢,继续看

以上代码中,evt就是记录了被拖目标对象的信息,然后通过toElemen.getAttribute可以获取到某个属性值,objsArr数组是canvas画布的所有图层记录

获取到后第一步是需要先把当前拖动的目标对象记录起来,然后splice将其从数组中删除,为什么是操作记录画布图层的数组,后面会说到,

移除之后,再将目标对象插入到数组指定的位置,然后调用

that.canvas2.renderAll();这就是为什么移除和插入的时候要操作画布的数据,因为操作完成后调用该句代码就会自动将画布进行重新绘制

最后调用之前封装的方法that.layer_edit_Evt();这时右边的数据列也进行了更新,如下图

以上就是关于fabricjs的部分图形操作,可能有的地方说的不太好,就请见谅了。

fabricjs:http://fabricjs.com/

  

原文地址:https://www.cnblogs.com/LHYwin/p/9498043.html

时间: 2024-11-13 15:39:40

使用fabricjs实现图形编辑器的相关文章

ada 图形编辑器 - GNAT GPL

The GNAT GPL and SPARK GPL Editions are made available to the free software developers by AdaCore. They are not intended for professional development, and AdaCore makes NO WARRANTY on them. The software on this page is made available under the Free S

vim编辑器详解

一.vim简介 vi: Visual Interface,文本编辑器 文本: ASCII, Unicode 文本编辑种类: 行编辑器: sed 全屏编辑器: nano, vi vim – Vi Improved 其他编辑器: gedit 一个简单的图形编辑器 gvim 一个Vim编辑器的图形版本 二.常见使用方法: vim [OPTION]- FILE- 文件操作: 打开文件: +#: 打开文件后,直接让光标处于第#行的行首 +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹

Linux 第八天: (08月09日) Linux文本编辑器vim

sed 行编辑器 stream EDitor sed -n 不输出模式空间内容的自动打印sed -e 多点编辑sed -f /PATH/TO/SCRIPTFILEsed -i 原处编辑 script单地址 # 指定的行/pattern/ 所能匹配到底每一行 地址范围#,##,+#/pat1/,/pat2/#,/pat1/~ 步进1~2 奇数行2~2 偶数行 sed d 删除模式空间匹配的行sed p 显示模式空间中的内容sed a \text 在行后追加文件, 支持\n多行追加sed i \te

zabbix3.2+Grafana4.0实现可视化监控图形

Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器.Grafana 是开源的,功能齐全的度量仪表盘和图形编辑器,支持 Graphite,InfluxDB 和 OpenTSDB.Grafana 主要特性:灵活丰富的图形化选项:可以混合多种风格:支持白天和夜间模式:多个数据源:Graphite 和 InfluxDB 查询编辑器等等.

VIM(VI)编辑器使用整理

VI: Visual Interface,文本编辑器 文本: ASCII, Unicode vi是一个功能强大的全屏幕文本编辑工具,一直以来都作为类UNIX操作系统的默认文本编辑器,vim(ViImproved)是vi编辑器的增强版本.在vi的基础上扩展了很多实用的功能,但是习惯上也将vim称作vi. 文本编辑种类 行编辑器: sed 全屏编辑器:nano, vi 其他编辑器 gedit 一个简单的图形编辑器 gvim  一个vim编辑器的图形版本 vi相关工具 vipw vipr 一.vim编

CSDN markdown 编辑器 第二篇 markdown简单使用

第一篇简单介绍了markdown. 第一篇地址 第二篇主要会介绍不熟悉markdown语言的人如何使用CSDN新的编辑器.这里主要介绍图形编辑器.已经掌握的人请挪步. 前面几个都非常简单.例如对字体加粗和斜体. - 或者是对 [帐前卒专栏](http://chillyc.info) 加个链接.用![连接图标](http://img.blog.csdn.net/20150312221433385) - 再者就是加个图片:![图片图标](http://img.blog.csdn.net/201503

[转]C&C++图形图像处理开源库

本文章已收录于: .embody { padding: 10px 10px 10px; margin: 0 -20px; border-bottom: solid 1px #ededed } .embody_b { margin: 0; padding: 10px 0 } .embody .embody_t,.embody .embody_c { display: inline-block; margin-right: 10px } .embody_t { font-size: 12px; co

开源图形库 c语言-图形图像库 集合[转]

开源图形库 c语言-图形图像库 集合[转] Google三维API O3D O3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准.此格式期望真正的基于浏览器,独立于操作系统之外,并且支持主流的3D显卡,这样就可以在网页中实现效果逼真 的3D动画.在线演示:http://o3... 更多O3D信息 最新新闻: 谷歌联手Mozilla基金开发3D互联网图像技术发布于 2个月前 绘图引擎 RRDtool 简单的说,RRDtool (

WPF学习10:基于MVVM Light 制作图形编辑工具(1)

图形编辑器的功能如下图所示: 除了MVVM Light 框架是一个新东西之外,本文所涉及内容之前的WPF学习0-9基本都有相关介绍. 本节中,将搭建编辑器的界面,搭建MVVM Light 框架的使用环境. 界面 <Window x:Class="GraphEditor.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http: