JS前端怎么以轻量fabric.js实现canvas

发布时间:2022-08-03 17:38:44 作者:iii
来源:亿速云 阅读:139

这篇文章主要讲解了“JS前端怎么以轻量fabric.js实现canvas”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS前端怎么以轻量fabric.js实现canvas”吧!

fabric.js 初体验

canvas 很强大,能够让我们创建一些令人惊叹的图形和功能,不过它仅仅是用来绘制而已,如果要进行一些交互或者改变画布上的内容,就是一件很麻烦的事情。好在 fabric.js 为 canvas 提供了一个缺失的对象模型,它负责管理画布的状态和渲染,可以让我们直接使用对象来操纵画布,极大方便了开发。

显然有同学没有去试一下 fabric.js,所以这里我们简单看一下它的使用方式:

// 第一步:初始化画布
const canvas = new fabric.Canvas('canvas');
// 第二步:创建物体
const rect = new fabric.Rect({
    top: 200,
    left: 100,
    width: 100,
    height: 100,
    fill: 'green',
});
// 第三步:向画布中添加物体,调用 add 才会绘制到画布中
canvas.add(rect);
// 第四步:让物体动起来
rect.animate(
    { top: 50, left: 400, angle: 45 },
    { duration: 1000, onChange: canvas.renderAll.bind(canvas) }
);

只要上面少许的代码,就能在 canvas 中画出一个绿色矩形,并且让它动起来,此外还默认支持三种变换操作(平移、旋转、缩放),非常适用于一些编辑和交互类的场景。

fabric.js 的大体结构

那 fabric.js 是个啥呢,我们引入这个库之后可以在控制台打印一下 fabric:

JS前端怎么以轻量fabric.js实现canvas

会看到 fabric(就是命名空间)下挂载这一堆东西(各种类等),我们再截个源码的图:

JS前端怎么以轻量fabric.js实现canvas

和控制台打印的结果大体能匹配上,fabric.js 的源码写的还是很清楚的,几乎每个文件都是一个类,层次分明,注释也多(不过是英文的),通过名字你也能猜测这个类是干什么的。我们则会实现它的核心部分并讲解一些具体思想,大概是下面这个样子:

JS前端怎么以轻量fabric.js实现canvas

如果你没接触过类似的东西,肯定会有很多困惑????,比如:

canvas 能干嘛?

鉴于有些同学 canvas 接触的比较少,所以这里就简单总结和回顾下 canvas 的一些基础知识。事实上 canvas 的 api 并不多,就像 html 中的标签,常用的就那么几个,但你没碰过就会总觉得它很多又不好学,其实我们只要知道它能做什么就行????:

这里简单扩充下 save 和 restore 这个知识点,因为一开始我们可能会对这个 api 的用法比较迷茫。一般来说 canvas 上面的东西是一个一个绘制的,每个东西有自己的状态,以 lineWidth(线宽) 和 strokeStyle(描边色) 为例子:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// ... 这里如果有绘制东西,用的是默认值
ctx.save(); // ---------①开始----------↓
ctx.lineWidth = 1;
ctx.strokeStyle = 'red';
ctx.strokeRect(0, 0, 20, 20);
  ctx.save(); // ----------②开始---------↓
  ctx.lineWidth = 2;
  ctx.strokeStyle = 'green';
  ctx.strokeRect(20, 20, 20, 20);
    ctx.save(); // ----------③开始----------↓
    ctx.lineWidth = 3;
    ctx.strokeStyle = 'blue';
    ctx.strokeRect(40, 40, 20, 20);
    // ... 这里如果有绘制东西,用的是③的状态
    ctx.restore(); // ---------③结束----------↑
    // ... 这里如果有绘制东西,用的是②的状态
  ctx.restore(); // ----------②结束---------↑
// ... 这里如果有绘制东西,用的是①的状态
ctx.restore(); // ----------①开始---------↑
// ... 这里如果有绘制东西,用的是默认值

效果大概是下面这个样子:

JS前端怎么以轻量fabric.js实现canvas

你可以把 save 和 restore 当做一对花括号????,所以它们得成对出现,每个括号里面是一种新的绘制状态,括号外面又是另一种状态。

它的本质是栈的结构(就是只能尾部添加或删除的数组),save 的时候会把当前的一堆状态属性保存起来(就是一个大对象),restore 的时候就是将栈顶的保存的状态拿出来置为当前的状态,看看下面这张图应该能比较好的理解????????:

JS前端怎么以轻量fabric.js实现canvas

我自己觉得 canvas 的库大体都是数据驱动视图的一种很好体现,我们只负责单纯的修改数据(物体的各种属性状态值),canvas 只负责单纯的绘制,两者各司其职,互不干扰,也有点单向数据流的味道。

感谢各位的阅读,以上就是“JS前端怎么以轻量fabric.js实现canvas”的内容了,经过本文的学习后,相信大家对JS前端怎么以轻量fabric.js实现canvas这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 轻量应用服务器是什么
  2. 轻量是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

js canvas fabric.js

上一篇:JS中continue关键字和break关键字的区别是什么

下一篇:Elementui怎么限制el-input框输入小数点

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》