likes
comments
collection
share

「趣学前端」实现超酷文本渐变动画,还得看Canvas的文本API

作者站长头像
站长
· 阅读数 47

背景

《HTML5 Canvas 开发详解》这本书我买了挺久的。但是书的文字小,内容多,又不常用,所以有点看不进去。最近睡前会看1小时书,可能是秋季的清爽,又或者藕粉的甜蜜,书读起来比绸缎还丝滑。

今天开始Canvas的第二篇笔记。

「趣学前端」实现超酷文本渐变动画,还得看Canvas的文本API

文字颜色跑马灯

书中给了一个文字颜色循环跑马灯的实例,是不是很带劲。今天主要分享Canvas中文本的知识点。

Canvas的文本API

基础文本设置

文本设置离不开几个属性:字体、大小、颜色、粗体。以及需要展示的文字内容。两个基础设置搞定。

ctx.font = 'bold 50px serif';
ctx.fillText(message, 50, 50);

实现

文字属性设置文字在画布位置效果展示
文字设置通过设置font属性实现位置通过fillText()方式实现。「趣学前端」实现超酷文本渐变动画,还得看Canvas的文本API

知识点

方法/属性解释参数
font绘制文字时,该属性设置当前字体样式。主要包括:font-style、font-weight、font-size、font-face。
fillText()该方法把想要填充的文字以及文本的 (x, y) 坐标传递到画布上。text:使用当前的 font, textAlign, textBaseline 和 direction 值对文本进行渲染。x:文本起点的 x 轴坐标。y:文本起点的 y 轴坐标。

文本居中

文本居中包括水平居中和垂直居中,两种居中使用了两种不同方式。

实现

水平居中垂直居中效果展示
measureText()方法帮助文字实现水平居中。textBaseline基准线帮助文字实现垂直居中。「趣学前端」实现超酷文本渐变动画,还得看Canvas的文本API

知识点

方法/属性解释参数
measureText()该方法返回一个关于被测量文本TextMetrics 对象包含的信息(例如它的宽度)。text:需要测量的String 。
textBaseline该属性是描述绘制文本时,当前文本基线的属性。top:文本基线在文本块的顶部。hanging:文本基线是悬挂基线。middle:文本基线在文本块的中间。alphabetic:文本基线是标准的字母基线。ideographic:文字基线是表意字基线;如果字符本身超出了 alphabetic 基线,那么 ideograhpic 基线位置在字符本身的底部。bottom:文本基线在文本块的底部。与 ideographic 基线的区别在于 ideographic 基线不需要考虑下行字母。alphabetic:默认值。

文字轮廓

这个功能可以让文字的空心样式变得非常简单。

实现

文字颜色实现轮廓效果展示
将文字颜色设置成白色。(和背景色一致)strokeStyle属性设置轮廓颜色。strokeText()方法设置轮廓在画布上回显。「趣学前端」实现超酷文本渐变动画,还得看Canvas的文本API

知识点

方法/属性解释参数
strokeStyle描述画笔(绘制图形)颜色或者样式的属性。默认值是 #000 (black)。color:DOMString 字符串,可以转换成 CSS 值。gradient:CanvasGradient 对象(线性渐变或放射性渐变)。pattern:CanvasPattern 对象(可重复的图片)。
strokeText()在给定的 (x, y) 位置绘制文本的方法。text:使用当前 font,textAlign,textBaseline和direction 的值对文本进行渲染。x:文本起始点的 x 轴坐标。y:文本起始点的 y 轴坐标。

设置文字渐变

渐变效果需要设置不同的颜色。

实现

渐变效果展示
createLinearGradient()方法创建线性对象。CanvasGradient.addColorStop() 方法添加线性偏移值和颜色值。「趣学前端」实现超酷文本渐变动画,还得看Canvas的文本API

知识点

方法/属性解释参数
createLinearGradient()该方法返回一个线性 CanvasGradient对象。想要应用这个渐变,需要把这个返回值赋值给 fillStyle 或者 strokeStyle。x0:起点的 x 轴坐标。y0:起点的 y 轴坐标。x1:终点的 x 轴坐标。y1:终点的 y 轴坐标。
CanvasGradient.addColorStop()该方法添加一个由偏移值和颜色值指定的断点到渐变。如果偏移值不在0到1之间,将抛出INDEX_SIZE_ERR错误,如果颜色值不能被解析为有效的 CSS 颜色值 ,将抛出SYNTAX_ERR错误。offset:0到1之间的值,超出范围将抛出INDEX_SIZE_ERR错误color:CSS 颜色值 。如果颜色值不能被解析为有效的 CSS 颜色值 ,将抛出SYNTAX_ERR错误。

总结

虽然文本API的属性和方法看着有点陌生,但是仔细一研究,全是“熟人”。几个方法一组合就能将文字玩出花,比如文章开头的跑马灯效果。后续更多效果持续探索中。

今天也是特别有收获的一天。

关于作者

转载自:https://juejin.cn/post/7136243472045965342
评论
请登录