来源:未知 时间:2022-09-03 00:01 作者:小飞侠 阅读:次
[导读] 这是 Fabric.js 中的一个新的 beta 功能。 您可以为文本指定一个名为 path 的 fabric.Path 属性,这将使文本呈现弯曲,跟随路径。 该功能是新的,并且有很多边缘情况需要解决和改进。 在这...
|
这是 Fabric.js 中的一个新的 beta 功能。您可以为文本指定一个名为 path 的 fabric.Path 属性,这将使文本呈现弯曲,跟随路径。该功能是新的,并且有很多边缘情况需要解决和改进。 在这个演示中,我们使用自由绘图来绘制路径,然后我们检查路径并尝试计算最佳字体大小以使文本适合路径。 我们使用该事件 然后
核心代码如下: fabric.Object.prototype.objectCaching = true;
var canvas = new fabric.Canvas('canvas', {
isDrawingMode: true,
freeDrawingBrush: new fabric.PencilBrush({ decimate: 8 })
});
// 监听路径开始创建回调
canvas.on('before:path:created', function(opt) {
// 获得当前路径
var path = opt.path;
var pathInfo = fabric.util.getPathSegmentsInfo(path.path);
path.segmentsInfo = pathInfo;
var pathLength = pathInfo[pathInfo.length - 1].length;
var text = 'This is a demo of text on a path. This text should be small enough to fit in what you drawn.';
var fontSize = 2.5 * pathLength / text.length;
// 核心代码...
// 创建文本利用第二参数中 path 挂载到指定路径 path对象
var text = new fabric.Text(text, { fontSize: fontSize, path: path, top: path.top, left: path.left });
// 核心代码end...
canvas.add(text);
});
// 路径创建完毕回调事件
canvas.on('path:created', function(opt) {
canvas.remove(opt.path);
})@fn解释:getPathSegmentsInfo/**
*运行经过解析和简化的路径并提取一些信息。
*信息是每个命令的长度和起点
*@param{Array}path fabricJS解析路径命令
*@return{Array}路径命令信息
{ length: totalLength, x: x1, y: y1,
tempInfo: {
x: x1,
y: y1,
command: current[0],
}
}
*/
function getPathSegmentsInfo(path) {
var totalLength = 0, len = path.length, current,
//x2 and y2 are the coords of segment start
//x1 and y1 are the coords of the current point
x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;
for (var i = 0; i < len; i++) {
current = path[i];
tempInfo = {
x: x1,
y: y1,
command: current[0],
};
switch (current[0]) { //first letter
case 'M':
tempInfo.length = 0;
x2 = x1 = current[1];
y2 = y1 = current[2];
break;
case 'L':
tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);
x1 = current[1];
y1 = current[2];
break;
case 'C':
iterator = getPointOnCubicBezierIterator(
x1,
y1,
current[1],
current[2],
current[3],
current[4],
current[5],
current[6]
);
angleFinder = getTangentCubicIterator(
x1,
y1,
current[1],
current[2],
current[3],
current[4],
current[5],
current[6]
);
tempInfo.iterator = iterator;
tempInfo.angleFinder = angleFinder;
tempInfo.length = pathIterator(iterator, x1, y1);
x1 = current[5];
y1 = current[6];
break;
case 'Q':
iterator = getPointOnQuadraticBezierIterator(
x1,
y1,
current[1],
current[2],
current[3],
current[4]
);
angleFinder = getTangentQuadraticIterator(
x1,
y1,
current[1],
current[2],
current[3],
current[4]
);
tempInfo.iterator = iterator;
tempInfo.angleFinder = angleFinder;
tempInfo.length = pathIterator(iterator, x1, y1);
x1 = current[3];
y1 = current[4];
break;
case 'Z':
case 'z':
// we add those in order to ease calculations later
tempInfo.destX = x2;
tempInfo.destY = y2;
tempInfo.length = calcLineLength(x1, y1, x2, y2);
x1 = x2;
y1 = y2;
break;
}
totalLength += tempInfo.length;
info.push(tempInfo);
}
info.push({ length: totalLength, x: x1, y: y1 });
return info;
}以上就是Fabric.js路径文字教程详解全部内容,感谢大家支持自学php网。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com