来源:未知 时间:2022-07-04 00:16 作者:小飞侠 阅读:次
[导读] Fabric.js 简介。 第2部分。 在 本系列的第一部分 ,我们才刚刚开始熟悉 Fabric.js。 我们研究了使用 Fabric 的原因,它的对象模型和对象层次结构,以及 Fabric 中可用的不同类型的实体——...
Fabric.js 简介。第2部分。在本系列的第一部分,我们才刚刚开始熟悉 Fabric.js。我们研究了使用 Fabric 的原因,它的对象模型和对象层次结构,以及 Fabric 中可用的不同类型的实体——简单的形状、图像和复杂的路径。我们还学习了如何在画布上使用 Fabric 对象执行简单的操作。 既然大部分基础知识都已经过去了,让我们开始做一些有趣的事情吧! 动画没有一个受人尊敬的画布库没有动画设施。Fabric 也不例外。由于有如此强大的对象模型和图形功能,如果没有内置动画助手将是一种耻辱。 还记得改变任何对象的属性是多么容易吗?我们只是调用了 rect.set('angle', 45); 好吧,动画对象同样容易。每个 Fabric 对象都有 rect.animate('angle', 45, { onChange: canvas.renderAll.bind(canvas) }); 第一个参数是动画的属性。第二个参数是动画的结束值。如果矩形有 -15° 角,并且我们传递 45,它将从 -15° 动画到 45°。第三个参数是一个可选对象,指定动画的更精细细节——持续时间、回调、缓动等。 一个方便的特性 rect.animate('left', '+=100', { onChange: canvas.renderAll.bind(canvas) }); 类似地,将物体逆时针旋转 5 度,可以这样完成: rect.animate('angle', '-=5', { onChange: canvas.renderAll.bind(canvas) }); 你可能想知道为什么我们总是在那里指定“onChange”回调。第三个参数不是可选的吗?是的,但是调用 请记住,在该画布表面下方有整个对象模型。对象有自己的属性和关系,canvas只负责将它们的存在投射到外界。
那么我们可以传递哪些其他选项来制作动画呢?
所有这些选项都应该是不言自明的,除了可能放宽一个。让我们仔细看看。 默认情况下, rect.animate('left', 500, { onChange: canvas.renderAll.bind(canvas), duration: 1000, easing: fabric.util.ease.easeOutBounce }); 注意 所以这几乎涵盖了Fabric的动画部分。只是为了给您一些可能的想法-您可以为对象的角度设置动画以使其旋转;为左/上属性设置动画以使其移动;为宽度/高度设置动画以使其缩小/增长;动画不透明度以使其淡入/淡出;等等。 fabric.runningAnimations如果您需要访问当前由 fabric 运行的动画,请使用 方便的方法:
let cancel = fabric.util.animate({...}); let i = fabric.runningAnimations.findAnimationIndex(cancel); let context = fabric.runningAnimations.findAnimation(cancel); let cancelled = fabric.runningAnimations.cancelAll(); // the following statements are true cancelled[i] === context; cancelled[i].cancel === cancel; fabric.runningAnimations.length === 0; 图像过滤器在本系列的第一部分,我们学习了如何在 Fabric 中处理图像。有 但是,尽管处理图像很有趣,但对它们应用图像过滤器会更酷! 默认情况下,Fabric 提供了很少的过滤器,无论是针对启用 WEBGL 的浏览器还是不支持的浏览器。它还可以轻松定义自己的。一些您可能非常熟悉的内置过滤器 - 过滤器以去除白色背景、灰度过滤器、反转或亮度过滤器。其他的可能不太受欢迎——彩色矩阵、棕褐色或噪声。 那么我们如何对 Fabric 中的图像应用过滤器呢?好吧,每个实例 所以让我们创建一个灰度图像。 fabric.Image.fromURL('pug.jpg', function(img) { // 添加滤镜 img.filters.push(new fabric.Image.filters.Grayscale()); // 应用滤镜并在完成后重新渲染画布 img.applyFilters(); // 将图像添加到画布上(它也会重新渲染画布) canvas.add(img); }); 棕褐色版本的图像怎么样? fabric.Image.fromURL('pug.jpg', function(img) { img.filters.push(new fabric.Image.filters.Sepia()); img.applyFilters(); // 将图像添加到画布上(它也重新渲染画布) canvas.add(img); }); 由于“filters”属性是一个简单的数组,我们可以用它以通常的方式执行任何所需的操作——删除过滤器(通过 fabric.Image.fromURL('pug.jpg', function(img) { img.filters.push( new fabric.Image.filters.Sepia(), new fabric.Image.filters.Brightness({亮度: 100 })) ; img.applyFilters(); canvas.add(img); }); 请注意,我们还将 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com