1. FabricJS 简介
FabricJS 是一个 HTML 5 canvas 库,它使开发人员可以轻松地在网页上创建交互式素材。该库提供了对鼠标,触摸和其他输入设备的全面支持,并能够处理高分辨率屏幕和外部资源(如图像和字体)。 FabricJS 还支持渐变填充,图案填充,缩放,旋转等常见的操作。Canvas 具有大多数其他 HTML 元素所不具备的优点,即可以将其用作矢量绘图编辑器的基础。
2. FabricJS 文本对象
FabricJS 中的 Text 对象用于在画布上绘制和编辑文本。可以设置文本的字体、大小、颜色和样式等属性,如加粗、斜体和下划线等。以下是创建一个基本文本对象的示例:
const text = new fabric.Text('Hello World!', {
left: 100,
top: 100,
fontSize: 30,
fontFamily: 'Arial',
stroke: 'red',
strokeWidth: 2,
fill: 'blue',
fontStyle: 'italic',
fontWeight: 'bold',
textDecoration: 'underline'
});
该对象的样式属性除了常规的 fill、stroke、fontSize 和 fontFamily 外,还包括
2.1 fontStyle 属性
fontStyle 属性用于控制字体样式。可以设置 normal(默认值)、italic(斜体)和 oblique(不同于斜体),其它样式只有在指定字体支持时有效。可以通过以下代码设置:
const text = new fabric.Text('Hello World!', {
...
fontStyle: 'italic'
});
2.2 fontWeight 属性
fontWeight 属性用于设置字体的粗细。可以设置 normal(默认值)、bold、bolder、lighter 或数字(100 到 900 的间隔值,默认为 400)。以下是一个示例:
const text = new fabric.Text('Hello World!', {
...
fontWeight: 'bold'
});
2.3 textDecoration 属性
textDecoration 属性用于给文本添加下划线、删除线或其他特殊效果。可以通过下面的代码来设置:
const text = new fabric.Text('Hello World!', {
...
textDecoration: 'underline'
});
3. 获取文本当前选择的样式
在 FabricJS 中,可以使用 getSelectedObject 方法访问当前选定对象。当 Text 对象被选中后,我们可以使用 Text#getSelectionStyles 方法获取到选择文本的样式:
const activeObject = canvas.getActiveObject();
if (activeObject && activeObject.type === 'text') {
const fontStyles = activeObject.getSelectionStyles();
console.log(fontStyles);
}
上述代码将返回当前文本框中所选文本的字体样式和颜色。如果您的应用程序通过更改当前文本框的内容更新画布,则您可以使用 Text#changed 属性确保在更改完成后更新文本框的样式:
canvas.on('text:changed', function(options) {
const activeObject = canvas.getActiveObject();
if (activeObject && activeObject.type === 'text') {
const fontStyles = activeObject.getSelectionStyles();
console.log(fontStyles);
}
});
4. 示例代码
以下示例演示了如何使用 FabricJS 获取文本区域中当前所选的样式:
// 初始化画布
const canvas = new fabric.Canvas('canvas');
// 创建文本对象
const text = new fabric.Text('Hello World!', {
left: 100,
top: 100,
fontSize: 30,
fontFamily: 'Arial',
stroke: 'red',
strokeWidth: 2,
fill: 'blue',
fontStyle: 'italic',
fontWeight: 'bold',
textDecoration: 'underline'
});
// 将文本对象添加到画布上
canvas.add(text);
// 当文本框被选中后,打印所选文本的字体样式和颜色
canvas.on('text:changed', function(options) {
const activeObject = canvas.getActiveObject();
if (activeObject && activeObject.type === 'text') {
const fontStyles = activeObject.getSelectionStyles();
console.log(fontStyles);
}
});
总结
FabricJS 库为开发人员提供了在网页上创建交互式素材的能力。可以使用 Text 对象在画布上绘制和编辑文本,并通过样式属性控制文本的字体、大小、颜色和样式等。使用 getSelectionStyles 方法可以获取到当前选中文本的样式。