详解Canvas实用库Fabric.js使用手册


Posted in HTML / CSS onJanuary 07, 2019

简介什么是Fabric.js?

Fabric.js是一个可以简化Canvas程序编写的库。 Fabric.js为Canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的工具。由于Fabric.js为国外框架,官方API杂乱繁多,相关文档大多为英文文档,而且数量不多,所以本文旨在帮助新手在项目中快速上手Fabric.js,享受绘制Canvas的过程。

为什么要使用Fabric.js?

Canvas提供一个好的画布能力, 但是Api不够友好。绘制简单图形其实还可以, 不过做一些复杂的图形绘制, 编写一些复杂的效果,就不是那么方便了。Fabric.js就是为此而开发,它主要就是用对象的方式去编写代码。

Fabric.js能做的事情

  • 在Canvas上创建、填充图形(包括图片、文字、规则图形和复杂路径组成图形)。
  • 给图形填充渐变颜色。
  • 组合图形(包括组合图形、图形文字、图片等)。
  • 设置图形动画集用户交互。
  • 生成JSON, SVG数据等。
  • 生成Canvas对象自带拖拉拽功能。

起步

Vue项目中引入Fabric.js

假设您的项目中正在使用ES6和Webpack,您可以开始使用Fabric.js,如下所示:

1、在命令行中:

npm install fabric(或yarn add fabric)

2、将其引入 .vue 文件中

import { fabric } from 'fabric'

3、在 .vue 的单文件中的 mounted: 生命周期里开始你的Fabric.js之旅啦

注:默认的fabric npm模块产生了相当大的包,如果Fabric.js中您有很多可能不需要的包,在这种情况下,可以在 在此处 或在命令行中构建你自己的版本。

绘制图形

绘制规则图形

1、声明画布

var canvas =new fabric.Canvas('main');

2、绘制图形

var rect = new fabric.Rect({

           left:100,//距离画布左侧的距离,单位是像素

           top:100,//距离画布上边的距离

           fill:'red',//填充的颜色

           width:30,//方形的宽度

          height:30//方形的高度

       });

3、添加图形至画布

canvas.add(rect);

其他规则图形:

  • 绘制方形 var rect = new fabric.Rect
  • 绘制圆形 var circle = new fabric.Circle
  • 绘制三角形 var triangle = new fabric.Triangle

详解Canvas实用库Fabric.js使用手册

绘制不规则图形

使用路径绘图:用点和线的移动的方式进行绘图。通过对 线、曲线、弧的应用绘制非常复杂的图形。

在fabric.Path( )方法中,“M”代表“移动”命令,这个“M 00” 代表把画笔移动到(0,0)点坐标。

“L”代表“线”,“L 200 100 ”的意思是使用钢笔画一条线,从(0,0)坐标画到(200,100)坐标。 “z” 代表让图形闭合路径。

画好三角形后,我们可以用set( )方法对三角形的位置、颜色、角度、透明度等属性进行设置。

具体代码如下:

var path = new fabric.Path('M 0 0 L 200 100 L 170 200 z');
path.set({ left: 120, top: 120,fill:'red' });
canvas.add(path);

详解Canvas实用库Fabric.js使用手册

对图片的操作

HTML插入图片

<body>
           <canvas id="canvas" width='800' height='800'></canvas>
           <img src="./2.png" id="img">
       </body>
       ---------------------
       var canvas = new fabric.Canvas('canvas');//声明画布
       var imgElement = document.getElementById('img');//声明我们的图片     
       var imgInstance = new fabric.Image(imgElement,{  //设置图片位置和样子
            left:100,
            top:100,
            width:200,
            height:100,
            angle:30//设置图形顺时针旋转角度
       });
      
       canvas.add(imgInstance);//加入到canvas中

详解Canvas实用库Fabric.js使用手册

JavaScript插入图片

var canvas = new fabric.Canvas('canvas');
           fabric.Image.fromURL('./2.png', function(oImg) {
           oImg.scale(0.1);//图片缩小10倍
           canvas.add(oImg);
       });

交互

对画布的交互

canvas.add(imgInstance);//加入到canvas中
       var canvas = new fabric.Canvas('canvas');
       canvas.on('mouse:down', function(options) {
           console.log(options.e.clientX, options.e.clientY)
       })

注:常用监听事件如下:

  • mouse:down:鼠标按下时
  • mouse:move:鼠标移动时
  • mouse:up:鼠标抬起时

对画布上对象的操作

var canvas = new fabric.Canvas('canvas');

       var rect = new fabric.Rect({ width: 100, height: 50, fill: 'green' });

       rect.on('selected', function() {//选中监听事件

           console.log('selected a rectangle');

       });

 

       var circle = new fabric.Circle({ radius: 75, fill: 'blue' });

       circle.on('selected', function() {

           console.log('selected a circle');

       });

       canvas.add(rect);

       canvas.add(circle);

注:常用监听事件如下:

  • after:render:画布重绘后
  • object:selected:对象被选中
  • object:moving:对象移动
  • object:rotating:对象被旋转
  • object:added:对象被加入
  • object:removed:对象被移除

详解Canvas实用库Fabric.js使用手册

组合

new fabric.Group():接受两个参数:要组合对象名称组成的数组、组合到一起的对象的共同属性。

var canvas = new fabric.Canvas('canvas');

        var circle = new fabric.Circle({//绘制圆形

        radius: 100,

        fill: '#f00',

        scaleY: 0.5,

        originX: 'center',//调整中心点的X轴坐标

        originY: 'center'//调整中心点的Y轴坐标

      });

     var text = new fabric.Text('Hello World', {//绘制文本

       fontSize: 30,

       originX: 'center',

       originY: 'center'

    })

    //进行组合

    var group = new fabric.Group([circle, text], {

      left: 150,

      top: 100,

      angle: 10

    })

    canvas.add(group);

详解Canvas实用库Fabric.js使用手册

序列化与反序列化

序列化

var canvas = new fabric.Canvas('canvas');

    var rect = new fabric.Rect({

        width: 100,

        height: 100,

        fill: 'red'

    });

    canvas.add(rect);
    
    console.log(JSON.stringify(canvas.toJSON()));

反序列化

var canvas = new fabric.Canvas('canvas');

    canvas.loadFromJSON('{"objects":[{"type":"rect","left":50,"top":50,"width":20,"height":20,"fill":"green","overlayFill":null}')

SVG

var canvas = new fabric.Canvas('canvas');

    var rect = new fabric.Rect({
        width: 100,
        height: 100,
        fill: 'red'
    });

    canvas.add(rect);

    canvas.toSVG();

参考文档:http://fabricjs.com/articles/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
Dec 30 HTML / CSS
css3的transition效果和transfor效果示例介绍
Oct 30 HTML / CSS
纯css3实现效果超级炫的checkbox复选框和radio单选框
Sep 01 HTML / CSS
纯CSS3制作页面切换效果的实例代码
May 30 HTML / CSS
canvas像素画板的实现代码
Nov 21 HTML / CSS
详解rem 适配布局
Oct 31 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
May 07 HTML / CSS
HTML5 Canvas绘制五星红旗
May 04 HTML / CSS
HTML5 canvas基本绘图之绘制曲线
Jun 27 HTML / CSS
基于CSS3画一个iPhone
Apr 21 HTML / CSS
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
Aug 23 HTML / CSS
使用CSS实现百叶窗效果示例代码
May 07 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
Jan 07 #HTML / CSS
h5使用canvas画布实现手势解锁
Jan 04 #HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
Jan 03 #HTML / CSS
详解webapp页面滚动卡顿的解决办法
Dec 26 #HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
Dec 21 #HTML / CSS
HTML5的postMessage的使用手册
Dec 19 #HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
Dec 18 #HTML / CSS
You might like
香妃
2021/03/03 冲泡冲煮
PHP新手上路(六)
2006/10/09 PHP
优化使用mysql存储session的php代码
2008/01/10 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
brook javascript框架介绍
2011/10/10 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
浅谈Python中数据解析
2015/05/05 Python
python动态参数用法实例分析
2015/05/25 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
windows下python安装小白入门教程
2018/09/18 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
老同学聚会感言
2014/02/23 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
内科护士节演讲稿
2014/09/11 职场文书
党支部工作总结2015
2015/04/01 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
施工安全保证书
2015/05/09 职场文书
反邪教观后感
2015/06/11 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
Python OpenCV快速入门教程
2021/04/17 Python