1. 什么是FabricJS
FabricJS 是一个用于处理HTML5 canvas元素的JavaScript 库。Canvas作为一项标准功能,它给设计师提供了一个很好的展示和创作平台,Fabricjs基于canvas创建图形处理支持。所以Fabricjs可以说是一个用于HTML5的画布库。
2. FabricJS 设置圆的比例因子“边框”
2.1 运用官网提供的demo
首先我们需要引入Fabricjs库,然后我们可以看一看官网提供的demo,官网给出了设置圆的比例因子“边框”的示例,我们可以参考它来设置,这里的canvas就是要展示的画布,circle就是要用来做比例因子的圆。
var canvas = new fabric.Canvas('canvas');
var circle = new fabric.Circle({
radius: 100,
stroke: 'red'
});
canvas.add(circle);
canvas.setWidth(600);
canvas.setHeight(600);
canvas.on("after:render", function() {
canvas.contextContainer.globalCompositeOperation = "destination-in";
var clipPath = circle.clipTo(canvas.getContext('2d'));
canvas.renderAll();
});
上述代码中,radius表示圆的半径大小,stroke表示圆的描边颜色为红色。我们将圆加入canvas中,之后设置canvas的宽度和高度。render函数是用来重新渲染画布的。
值得注意的是函数after:render,当canvas画布上的所有对象被渲染时,则触发这个事件。在这个事件里面,我们需要将画布的合成模式globalCompositeOperation设置成"destination-in",然后我们把圆所在的区域离屏渲染(clipTo),这一函数会返回一个clipPath对象。最后我们把渲染后的画布再次渲染到canvas中,设置canvas.renderAll()。
2.2 设置圆的比例因子“边框”
我们在画圆时设定圆的线宽,然后在渲染后清空圆中的内容,接着重新渲染的时候,不仅圆边缘的线条得以主动显示,还能容易地随着圆的变化扩大或缩小;这就是所谓的比例因子“边框”,下面我们就来设置这一边框的参数。
首先看一下下面的代码:
var canvas = new fabric.Canvas('canvas');
var circle = new fabric.Circle({
radius: 100,
stroke: '#fff',
strokeWidth: 5
});
canvas.add(circle);
circle.center();
canvas.setWidth(600);
canvas.setHeight(600);
canvas.on("after:render", function() {
canvas.contextContainer.globalCompositeOperation = "destination-in";
var ctx = canvas.getContext('2d');
var clipPath = circle.clipTo(canvas.getContext('2d'));
var scale = canvas.getZoom();
ctx.save();
ctx.fillStyle = "#000";
ctx.scale(1 / scale, 1 / scale);
var stroke = circle.strokeWidth * scale;
ctx.lineWidth = stroke;
circle._renderStroke(ctx);
ctx.restore();
canvas.renderAll();
});
circle.strokeWidth表示设置圆的描边宽度,我们把它定为5。scale就是比例因子,它表示使用哪个比例因子来控制圆的大小,它的值为canvas.getZoom(),这里getZoom()会根据滚轮事件的情况来设置。我们利用ctx.save()来备份当前的设置,之后设定fillStyle和线宽。circle._renderStroke()将圆的描边重新渲染过一次,之后使用ctx.restore()来恢复文件的设置。
在这些设置的基础上,我们将新的圆添加到canvas中,之后,我们会发现圆的描边颜色从红色变为了白色,并且有了类似于边框的效果。
总结
使用FabricJS设置圆的比例因子“边框”,需要先加入画布,之后渲染并设置圆,设置边框的相关参数。我们可以利用官网提供的demo,快速了解设置方法,也可以多加思考和尝试。