Fabric.js 讲解官方demo:Stickman

本文简介

戴尬猴,我是德育处主任


Fabric.js 官网有很多有趣的Demo,不仅可以帮助我们了解其功能,还可以为我们提供创意灵感。其中,Stickman是一个非常有趣的例子。

先看看效果图

file

从上图可以看出,在拖拽圆形时,跟圆形相连的那条红线的一端也会跟着移动。



原理讲解

Fabric.js 有一定了解的工友可以先自己看看 官方案例。

还不了解 Fabric.js 的可以看看 《Fabric.js从入门到???》


这个案例的代码其实不长,案例中用到的方法我在之前的文章中基本有提到过。

简单罗列一下案例中用到的方法:

  • originXoriginY 的值都等于 center
  • 创建圆和线的方法:new fabric.Circlenew fabric.Line
  • object.set 方法
  • canvas.renderAll 方法

打开就这几步操作啦,是不是很简单。

其原理是,创建圆形的时候,这个圆要和一根或者多根红线的其中一端绑定。在移动圆的时候,绑定的线跟着移动。(说了等于没说,哈哈哈哈)

但官方案例中的难点是有多根线和多个圆,对于刚接触 Fabric.js 的工友来说不太友好。

我们就先从1根线和1个圆讲起!



编码环节

首先创建一根直线和一个圆形(把手)。

看过《Fabric.js从入门到???》的工友应该非常清楚如何创建一线和圆形。

但在这个例子中创建出来的元素要符合以下规则:

  • 直线不能让用户直接操作。
  • 直线的其中一端要和圆形绑定。
  • 圆形移动时,直线被绑定的那端也要跟着移动。

file

我在代码中添加了详细的注释,仔细看~

<canvas id="c" width="500" height="500" style="border: 1px solid #ccc;"></canvas><script src="https://unpkg.com/fabric@5.3.0/dist/fabric.min.js"></script>
<script>// 绑定画布元素const canvas = new fabric.Canvas('c')// 让全局的元素都以中心为原点(根据你实际业务需求去设置吧)fabric.Object.prototype.originX = 'center'fabric.Object.prototype.originY = 'center'// 创建直线let line = new fabric.Line([ 50, 40, 200, 40 ], // 直线的4个坐标 [x1, y1, x2, y2]{fill: 'red', // 直线填充颜色stroke: 'red', // 直线边框颜色strokeWidth: 5, // 直线边框粗细selectable: false, // 当设置为“ false”时,不能选择对象进行修改(使用基于点击或基于组的选择)。但事情还是发生了。evented: false, // 当设置为“ false”时,对象不能成为事件的目标。所有事件都会通过它传播。})// 创建圆形let circle = new fabric.Circle({left: line.get('x1'), // 圆形x坐标,用了直线的起点的x坐标top: line.get('y1'), // 圆形y坐标,用了直线的起点的y坐标strokeWidth: 5,radius: 12, // 半径fill: '#fff',stroke: '#666',hasControls: false, // 当设置为“ false”时,对象的控件不会显示,也不能用于操作对象hasBorders: false // 当设置为“ false”时,不呈现对象的控制边框})// 将直线和圆形添加到画布中canvas.add(line, circle)// 移动元素时触发的事件canvas.on('object:moving', function(e) {// 因为本例只有圆形能移动,所以我在函数中并没有去判断当前操作的是什么元素var p = e.target // 获取当前移动的元素line.set({'x1': p.left, 'y1': p.top}) // 将直线的起点坐标的x和y设置成圆形的left和topcanvas.renderAll() // 重新渲染画布})
</script>

经过上面的一番操作,当用户移动圆形时,直线被绑定的那端也会跟着移动。


如果你理解了上面的代码,再看看官方的案例应该就能理解了。



代码仓库

⭐ 简单版的stickman



推荐阅读

👍《Fabric.js 从入门到膨胀》

👍《Fabric.js 自定义控件》

👍《Fabric.js 样式不更新怎么办?》

👍《Fabric.js 图案画笔(笔刷)》

👍《Fabric.js 让用户手动加粗文本》

👍《Fabric.js 精简输出的JSON》


点赞 + 关注 + 收藏 = 学会了 代码仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/151863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【排序】js简单实现前端数组排序,多字段数组对象排序,字符串排序,数字排序等

数组对象排序&#xff08;多字段排序&#xff09; 排序前&#xff1a; 排序后&#xff1a; data() {return {list: [{ks: 外科,child_ks: 泌尿外科,xz: 外科一组,doctor: 小明,num: 18,num2: 19,num3: 20},{ks: 中医科,child_ks: 中医男科,xz: 外科一组,doctor: 小红,num: …

GZ035 5G组网与运维赛题第4套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第4套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

DTI-ALPS处理笔记

DTI-ALPS处理笔记 前言: 前段时间刚好学习了一下DTI-ALPS处理(diffusion tensor image analysis along the perivascular space ),记录一下,以便后续学习。ALPS是2017年发表在《Japanese Journal of Radiology》的一篇文章首次提出的 (文章地址),主要用于无创评估脑内淋…

Istio 运行错误 failed to update resource with server-side apply for obj 问题解决

Istio 环境 kubernetes version: v1.18.2 istio version: v1.10.0运行之后 istio-operator 的日志就抛出下面错误&#xff0c;而且会一直重启 # kubectl get iop -A NAMESPACE NAME REVISION STATUS AGE istio-system iop-pro-cluster…

设计模式(18)桥接模式

一、介绍&#xff1a; 1、定义&#xff1a;桥接(Bridge)模式属于结构型设计模式。通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。把抽象(abstraction)与行为实现(implementation)分离开来&#xff0c;从而可以保持各部分的独立性以及应对它们的功能扩展…

指针仪表读数YOLOV8NANO

指针仪表读数YOLOV8 NANO 采用YOLOV8 NANO训练&#xff0c;标记&#xff0c;然后判断角度&#xff0c;得出角度&#xff0c;可以通过角度&#xff0c;换算成数据

SparkSQL综合案例-省份维度的销售情况统计分析

一、项目背景 二、项目需求 &#xff08;1&#xff09;需求 ①各省销售指标&#xff0c;每个省份的销售额统计 ②TOP3销售省份中&#xff0c;有多少家店铺日均销售额1000 ③TOP3省份中&#xff0c;各个省份的平均单价 ④TOP3省份中&#xff0c;各个省份的支付类型比例 &#x…

Apollo 快速上手指南:打造自动驾驶解决方案

快速上手 概述云端体验登录云端仿真环境 打开DreamView播放离线数据包PNC Monitor 内置的数据监视器cyber_monitor 实时通道信息视图福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo 开放平台是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自…

Go学习第十三章——Gin(入门与路由)

Go web框架——Gin&#xff08;入门与路由&#xff09; 1 Gin框架介绍1.1 基础介绍1.2 安装Gin1.3 快速使用 2 路由2.1 基本路由GET请求POST请求 2.2 路由参数2.3 路由分组基本分组带中间件的分组 2.4 重定向 1 Gin框架介绍 github链接&#xff1a;https://github.com/gin-gon…

如何和安装Windows10系统教程(最新最详细)

目录 一.简介 二.安装步骤 软件&#xff1a;Windows 10版本&#xff1a;1909语言&#xff1a;简体中文大小&#xff1a;4.95G安装环境&#xff1a;Win10/Win8/Win7(64位&#xff09;硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①丨百度网盘&#xff1a…

【蓝桥每日一题]-前缀和与差分(保姆级教程 篇2)#差分序列

昨天讲的概念和模板&#xff0c;今天讲一个差分序列的好题(好好体会里面的优化思想)&#xff1a; 目录 题目&#xff1a; 思路&#xff1a; 题目&#xff1a; 手动打出样例哈 输入&#xff1a; 输出&#xff1a; 4 …

MySQL -- 表的约束

MySQL – 表的约束 文章目录 MySQL -- 表的约束一、表的约束1.空属性2.默认值3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键 一、表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合 法…