fabric.js和高级画板

本文介绍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;
});

福利环节

简易画板程序GitHub地址:https://github.com/vipstone/drawingboard

fabric.js使用秘籍:https://github.com/vipstone/drawingboard/blob/master/fabricjs%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0.md

原文地址:https://www.cnblogs.com/vipstone/p/8716419.html

时间: 2024-10-16 11:54:26

fabric.js和高级画板的相关文章

JS Replace() 高级用法(转)

在很多项目中,我们经常需要使用JS,在页面前面对前台的某些元素做做修改,js 的replace()方法就必不可少. 经常使用"ABCABCabc".replace("A","B")的同学应该会比较清楚,改语句的最终结果是BBCABC,这种方法只能替换 第一个匹配的元素.如果替换所有呢?使用正则表达式即可: "ABCABCabc".replace(/A/g,"B") 即可. 那如果想替换A的同时也可以替换a呢

(转)第04节:Fabric.js用路径画不规则图形

在Canvas上画方形.圆形.三角形都是很容易的,只要调用fabric对应的方法就可以了,但这些都是规则的图形,如果你想画一个不规则的图形,这时候你可以用fabric.js提供的路径绘图方法.所谓路径绘图就是用点和线的移动的方式进行绘图.通过对 线.曲线.弧的应用你可以非常复杂的图形. 我们先来看一段的代码: var canvas = new fabric.Canvas('canvas'); var path = new fabric.Path('M 0 0 L 200 100 L 170 20

(转)第05节:Fabric.js的动画设置

凡是出色的Canvas库都少不了制作动画的方法,Fabric.js也不例外,它有着编写简单且功能强大的动画助手,这就是animate( )方法. animate主要使用代码如下: rect.animate('angle',360,{ onChange:canvas.renderAll.bind(canvas) }) 意思是设置了rect的动画是旋转到360度,onChange是动画的回调函数,可以绑定事件,那这里就是当canvas渲染完成时自动发生动画. animate接收三个参数: 第一个参数

fabric.js的简单上手及基于fabric.js的canvas切图工具:1、基本使用及配置

参考链接 Fabric.js 简单介绍和使用 简介 Fabric.js是一个可以简化canvas程序编写的库. Fabric.js为canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的工具.基于MIT协议开源,在github上有许多人贡献代码. 为什么选择fabric.js 手上的项目必须使用canvas 原生的canvas API不够友好 用fabric.js实现切图用户体验更好 为项目以后的迭代留下扩展的余地 简单上手 请参考文章开头的参考链接 这里主要介绍

javascript深入理解js闭包-高级

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function

JS 之高级函数

作用域安全的构造函数 当使用new调用构造函数时,构造函数内部this对象会指向新创建的对象实例.如果不使用new,直接调用的话,则this对象会映射到window对象上.所以需要判断下. eg: function Person(name,age,job){ if(this instanceof Person){ this.name = name; this.age = age; this.job = job; }else{ return new Person(name,age,job); }

JS面向对象高级特性

本篇是通过学习视频<一头扎进javascirpt高级篇>整理的一些相关知识,大致包括下面几个方面: 1 对象的创建方法 2 对象的对象属性.私有属性.类属性 3 对象的对象方法.私有方法.类方法 4 javascirpt的继承.封装.与多态 对象的创建方法: 对象的创建可以通过两种方式,第一种通过对象初始化的方法: var person={ name:"xingoo", age:26, say:function(){ console.log("say someth

js的高级操作

1.对象使用的高级 对象的key为字符串类型, value为任意类型 var obj = { name: "name", "person-age": 18 } // 访问 obj.name | obj["name"] obj["person-age"] 对象的属性可以任意添加与删除 var obj = { name: "obj" } // 删除 delete obj.name // 添加 obj.age =

js基础高级3

1.浮动与定位结合使用 浮动与相当定位 // 1.两者均参与布局 // 2.主浮动布局, 相对布局辅助完成布局微调 // 3.相对定位布局微调不同于盒模型布局微调, 相对定位布局不影响盒子原有位置, 就不会影响兄弟盒子布局 浮动与绝对定位 // 1.只保留绝对定位布局 // 2.脱离文档流的盒子宽可以交于内容撑开 2.更新数据案列 默认活跃状态 // 1.将初始的li设置一个active类名(拥有该类名就拥活跃状态表现的属性) 更改活跃状态 let active_index = 0; // 活跃