本文介绍fabric.js框架使用,以及使用fabricjs打造一个高级画板程序.

高级画板功能介绍

全局绘制颜色选择

护眼模式、网格模式切换

自由绘制

画箭头

画直线

画虚线

画圆/椭圆/矩形/直角三角形/普通三角形/等边三角形

文字输入

图片展示及相关移动、缩放等操作

删除功能

(文末附:画板GitHub地址&fabric.js使用秘籍)

功能截图如下:

动态效果图:

fabric.js介绍

fabric.js是什么

fabric.js是可以简化canvas编写的js库,提供canvas缺少的对象模型,包含动画、数据序列号和反序列化的等高级功能的js库,开源项目,在GitHub有很多人贡献。

fabric.js优缺点

优点:fabric提供超好的画布能力.

缺点:api超级烂,没有相应的demo代码,上手难度较大.

fabric.js使用笔记

对象

fabric.Circle 圆

fabric.Ellipse椭圆

fabric.Line 直线

fabric.Polygon

fabric.Polyline

fabric.Rect 矩形

fabric.Triangle 三角形

方法

add(object) 添加

insertAt(object,index) 添加

remove(object) 移除

forEachObject 循环遍历

getObjects() 获取所有对象

item(int) 获取子项

isEmpty() 判断是否空画板

size() 画板元素个数

contains(object) 查询是否包含某个元素

fabric.util.cos

fabric.util.sin

fabric.util.drawDashedLine 绘制虚线

getWidth() setWidth()

getHeight()

clear() 清空

renderAll() 重绘

requestRenderAll() 请求重新渲染

rendercanvas() 重绘画板

getCenter().top/left 获取中心坐标

toDatalessJSON() 画板信息序列化成最小的json

toJSON() 画板信息序列化成json

moveTo(object,index) 移动

dispose() 释放

setCursor() 设置手势图标

getSelectionContext()获取选中的context

getSelectionElement()获取选中的元素

getActiveObject() 获取选中的对象

getActiveObjects() 获取选中的多个对象

discardActiveObject()取消当前选中对象

isType() 图片的类型

setColor(color) = canvas.set("full","");

rotate() 设置旋转角度

setCoords() 设置坐标

事件

object:added

object:removed

object:modified

object:rotating

object:scaling

object:moving

object:selected 这个方法v2已经废弃,使用selection:created替代,多选不会触发

before:selection:cleared

selection:cleared

selection:updated

selection:created

path:created

mouse:down

mouse:move

mouse:up

mouse:over

mouse:out

mouse:dblclick

常用属性

canvas.isDrawingMode = true; 可以自由绘制

canvas.selectable = false; 控件不能被选择,不会被操作

canvas.selection = true; 画板显示选中

canvas.skipTargetFind = true; 整个画板元素不能被选中

canvas.freeDrawingBrush.color = "#E34F51" 设置自由绘画笔的颜色

freeDrawingBrush.width 自由绘笔触宽度

IText的方法

selectAll() 选择全部

getSelectedText() 获取选中的文本

exitEditing() 退出编辑模式

绘制直线

var line = new fabric.Line([10, 10, 100, 100], {

fill:'green',

stroke:'green', //笔触颜色

strokeWidth: 2,//笔触宽度

});

canvas.add(line);

绘制虚线

在绘制直线的基础上添加属性strokeDashArray:Array

example:

var line = new fabric.Line([10, 10, 100, 100], {

fill:'green',

stroke:'green',

strokeDashArray:[3,1]

});

canvas.add(line);

strokeDashArray[a,b] =》 每隔a个像素空b个像素。

图片去掉选中边框和旋转,且只能移动,不可操作

oImg.hasControls = false; 只能移动不能(编辑)操作

oImg.hasBorders = false; 去掉边框,可以正常操作

hasRotatingPoint = false; 不能被旋转

hasRotatingPoint 控制旋转点不可见

fabric.Image.fromURL("300.jpg", function(oImg) {

canvas.add(oImg);

oImg.hasControls= oImg.hasBorders = false;

});

示例和源码

常用问题处理

1、Textbox调整大小(fontSize)导致光标和字体不对应的bug(通常是在canvas.setZoom(>1)设置之后)?

解决方案:不要使用fontSize调整字体,使用scaleX、scaleY来调整字体大小,示例如下:

textbox.scaleX = 0.5;

textbox.scaleY = 0.5

2、如何开启元素多选?

解决方案:canvas.selection = true; // 开启多选

java 高级画板_fabric.js和高级画板相关推荐

  1. fabric.js和高级画板

    本文介绍fabric.js框架使用,以及使用fabricjs打造一个高级画板程序. 高级画板功能介绍 全局绘制颜色选择 护眼模式.网格模式切换 自由绘制 画箭头 画直线 画虚线 画圆/椭圆/矩形/直角 ...

  2. 微信小程序学习笔记 ( 小程序主体学习 二 逻辑层 app.js 扩展 高级食用方法)

    目录结构 上图是我建立的的微信小程序的目录结构 主体学习 逻辑层(App Service) 小程序开发框架的逻辑层由 JavaScript 编写.    逻辑层将数据进行处理后发送给视图层,同时接受视 ...

  3. Case Study: 利用JS设计高级检索功能通过PHP获取MySQL数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个含有高级检索功能的数据库网页.该功能效果如图1所示.用户在文本框中输入相应内容 ...

  4. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  5. 入门Java要学习的一些基本和高级工具

    Java作为编程语言,一直被模仿从未被超越.Java的简单性和应用广泛性也是众多人吹捧的原因之一.本文小千主要介绍入门Java要学习的一些基本和高级工具,希望能帮到大家. 1. JIRA Atlass ...

  6. Java生成随机数的几种高级用法

    转载自 进阶 | Java生成随机数的几种高级用法! 言归正传,众所周知,随机数是任何一种编程语言最基本的特征之一.而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数.看似简单,但有时我们也 ...

  7. Java Socket通信实现多人多端网络画板聊天室

    老规矩,先上实现的效果展示! Java Socket通信实现多人多端网络画板聊天室 本文介绍了一个基于Socket实现网络画板聊天室的完整过程,聊天室具备多人文本对话.同步绘图等功能. 初尝试 Soc ...

  8. Java 基础 第3阶段:高级应用——尚硅谷学习笔记(含面试题) 2023年

    Java 基础 第 3 阶段:高级应用--尚硅谷学习笔记(含面试题) 2023 年 Java 基础 第 3 阶段:高级应用--尚硅谷学习笔记(含面试题) 2023 年 第 9 章 异常处理 9.1 异 ...

  9. html+js+canvas实现画板涂画功能和vue+canvas实现画板涂画功能

    1,html+js+canvas实现画板涂画功能 效果如下: <!DOCTYPE HTML> <html> <head><meta charset=" ...

最新文章

  1. 带你深入理解图灵机--天才所在的时代
  2. GT Transceiver中的重要时钟及其关系(3)多个外部参考时钟使用模型
  3. Ubuntu系统安装VNC(VNCViewer)
  4. C语言中的静态函数的作用
  5. 2020蓝桥杯省赛---java---C---1(约数个数)
  6. linux 系统维护的几样工具
  7. c#之线程总结(一)
  8. Spring_Mybatis整合实现CRUD操作
  9. 电脑c语言翻译器,C语言window--在线翻译器.doc-资源下载人人文库网
  10. PPC软件字体太小的调整
  11. 香橙派进入系统后设置ip
  12. 阿里云API调用 OCR python
  13. 单细胞测序对于医学的意义
  14. Unity 扭曲扰动Shader 效果解析
  15. DNN与推荐两大门派,一念神魔,功不唐捐
  16. 第十三题:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值5钱,一只母鸡值3钱,三只小鸡值1钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
  17. 创业公司如何划分股份
  18. 听觉外围分析matlab,扫描附近的低功耗 Bluetooth 外围设备 - MATLAB blelist - MathWorks 中国...
  19. MBA-day25 最值问题-应用题
  20. C语言为什么不会过时?

热门文章

  1. 解决xampp 外网访问不了
  2. Java 8 字符串和时间相互转换
  3. Matlab中三维直方图的显示方法
  4. 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法
  5. 理解PBR:从原理到实现(上)
  6. soul从入门到进阶04——压测soul网关
  7. 开源的企业级网络管理平台:OpenNMS+SugarNMS
  8. 高效软件定时器的设计
  9. 5G网络巨大耗电量和基站密度,注定5G服务价格昂贵
  10. resultMap的用处