黑马程序员技术交流社区

标题: 【济南校区】前端就业班笔记Canvas(五):绘制文本 [打印本页]

作者: 小鲁哥哥    时间: 2018-5-24 11:51
标题: 【济南校区】前端就业班笔记Canvas(五):绘制文本
本帖最后由 小鲁哥哥 于 2018-5-24 11:52 编辑

【济南校区】前端就业班笔记Canvas(五)

绘制文本的方法
文本样式
绘制文字
语法:
描述:
案例
[JavaScript] 纯文本查看 复制代码
    ...
    ctx.strokeRect( 100, 100, 200, 50 );
    ctx.strokeText( 'Hello JK', 100, 100 );

    ctx.strokeRect( 100, 200, 200, 50 );
    ctx.fillText( 'Hello JK', 100, 200 );
效果

注意: 第一个文字由于中间空心, 所以文字相当于双线显示. 就显得较粗.根据绘制的矩形块可以发现文字几乎使用该点作为文字基线参考.

计算文本尺寸
语法: CanvasRenderingContext2D.measureText()
描述:
设置文字属性设置文字字体
语法: CanvasRenderingContext2D.font = value
描述:
修改字号后查看 strokeText 与 fillText 的区别
[JavaScript] 纯文本查看 复制代码
    ...
    ctx.font = '50px 黑体';
    ctx.strokeRect( 100, 100, 200, 50 );
    ctx.strokeText( 'Hello JK', 100, 100 );

    ctx.strokeRect( 100, 200, 200, 50 );
    ctx.fillText( 'Hello JK', 100, 200 );

效果

设置字体水平对齐方式
语法: CanvasRenderingContext2D.textAlign = value
描述:
start 表示根据参考基准点的垂直直线左靠对齐
[JavaScript] 纯文本查看 复制代码
    ...
    ctx.moveTo( 150, 100 );
    ctx.lineTo( 150, 200 );
    ctx.moveTo( 100, 150 );
    ctx.lineTo( 200, 150 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';
    ctx.textAlign = 'start'; // 默认
    ctx.fillText( '测试文字', 150, 150 );

效果

end 表示根据参考基准点的垂直直线右靠对齐
[JavaScript] 纯文本查看 复制代码
    ...
    ctx.font = '30px 黑体';
    ctx.textAlign = 'end';
    ctx.fillText( '测试文字', 150, 150 );

效果

left 与 right 就是左对齐与右对齐的意思
[JavaScript] 纯文本查看 复制代码
    ...
    ctx.font = '30px 黑体';
    ctx.textAlign = 'left';
    ctx.fillText( 'left', 150, 150 );
    ctx.textAlign = 'right'
    ctx.fillText( 'right', 150, 150 );

效果

最后 center 就是居中的含义.
[JavaScript] 纯文本查看 复制代码
    ctx.font = '50px 黑体'
    ctx.textAlign = 'center';
    ctx.fillText( '00000', 150, 150 );

效果

设置字体垂直对齐方式
语法: CanvasRenderingContext2D.textBaseline = value
描述:
top, middle, bottom 使用的较多
[JavaScript] 纯文本查看 复制代码
    ...
    // ------------------
    ctx.moveTo( 100, 80 );
    ctx.lineTo( 500, 80 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';

    ctx.textBaseline = 'top';
    ctx.fillText( 'abfghijklpqrty', 150, 80 );

    // ------------------
    ctx.translate( 0, 100 );
    ctx.moveTo( 100, 80 );
    ctx.lineTo( 500, 80 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';

    ctx.textBaseline = 'bottom';
    ctx.fillText( 'abfghijklpqrty', 150, 80 );

    // ------------------
    ctx.translate( 0, 100 );
    ctx.moveTo( 100, 80 );
    ctx.lineTo( 500, 80 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';

    ctx.textBaseline = 'middle';
    ctx.fillText( 'abfghijklpqrty', 150, 80 );
效果

alphabetic 表示字母参考线, ideographic 会比它低一点, hanging 表示悬挂.
[JavaScript] 纯文本查看 复制代码
    ctx.moveTo( 100, 80 );
    ctx.lineTo( 500, 80 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';

    ctx.textBaseline = 'alphabetic';
    ctx.fillText( 'abfghijklpqrty', 150, 80 );

    // -------------------------------------------------

    ctx.translate( 0, 100 );
    ctx.moveTo( 100, 80 );
    ctx.lineTo( 500, 80 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';

    ctx.textBaseline = 'ideographic';
    ctx.fillText( 'abfghijklpqrty', 150, 80 );

    // -------------------------------------------------

    ctx.translate( 0, 100 );
    ctx.moveTo( 100, 80 );
    ctx.lineTo( 500, 80 );
    ctx.strokeStyle = 'red';
    ctx.stroke();

    ctx.font = '30px 黑体';

    ctx.textBaseline = 'hanging';
    ctx.fillText( 'abfghijklpqrty', 150, 80 );
效果

实际上大多数参考方式只有在特定语言中有作用, 而且与字体也有相对复杂的关系. 例如( 下图是有部分错误的 ):


如果你想了解更多黑马课程请点击这里,如果你想加入黑马这个大家庭学习先进技术,广交天下好友!
黑马程序员济南中心联系电话:0531-55696830






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2