fabricjs,就是一个前端画板,canvas的增强版。
使用fabricjs来画六边形和canvas画其实原理是一样的,只是方法不同。
- 设定变量:
start
鼠标按下,开始的事件对象upObj
在鼠标没有松开的情况下上一次绘画的对象
绑定画板事件
mouse:down
设置开始事件1.6 1
canvas.on("mouse:down", o => (start = o.e));
绑定画板事件
mouse:up
绘画结束,清空开始事件对象,并清空上一次绘画对象1.6 1
2
3
4canvas.on("mouse:up", o => {
start = null;
upObj = null;
});绑定画板事件
mouse:move
绘画,也可以在mouse:up
时绘画,但这样体验效果不好1.6 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26canvas.on("mouse:move", o => {
if (!start) {
return;
}
if (upObj) {
canvas.remove(upObj);
}
const { offsetX: sx, offsetY: sy } = start;
const { e: { offsetX: ex, offsetY: ey } } = o;
// 计算半径,边长
const R = Math.sqrt((ex - sx) * (ex - sx) + (ey - sy) * (ey - sy)) / 2;
// 6条边的坐标点(60是六边形的内角度数)
const points = Array.from({ length: 6 }).map((item, index) => {
return {
x: Math.cos(60 * index / 180 * Math.PI) * R,
y: Math.sin(60 * index / 180 * Math.PI) * R
};
});
upObj = new fabric.Polygon(points, {
top: sy,
left: sx,
stroke: "red",
fill: "rgba(255,255,255,0)"
});
canvas.add(upObj);
});