利用Canvas怎么实现文本渐变效果,方法是什么
Admin 2022-07-02 群英技术资讯 768 次浏览
前言
在 Canvas 中对文本填充水平或垂直的线性渐变可以轻易实现,而带角度的渐变就复杂很多;就好像下面这样,假设文本矩形宽为 W
, 高为 H
, 左上角坐标为 X, Y
。
猜想与答案
给出两个答案:
正确答案是图二,因为这样得出来的坐标生成的渐变最紧接文本矩形边界,它的运动轨迹如下动图:
(图来源:Do you really know CSS linear-gradients)
渐变起点与终点坐标的计算
所以,渐变的起点与终点坐标该怎么计算呢?答:
线性渐变长度的计算 W3C 给出了一个公式(A 表示角度):
gradientLineLength = abs(W * sin(A)) + abs(H * cos(A))
不过,该公式主要应用于 CSS 的线性渐变设置,即以 12 点钟方向为 0°,顺时针旋转。
而我们需要的是以 3 点钟方向为 0°,逆时针旋转,即公式为:
gradientLineLength = abs(W * cos(A)) + abs(H * sin(A)) // 半长: halfGradientLineLength = (abs(W * cos(A)) + abs(H * sin(A))) / 2
那么这个公式是怎么来的呢?以下是笔者的求解:
由图可得以下方程组:
因此可推导出:
化简后为:
所以 c1 + c2
为:
由三角函数平方公式知:cos(A) * cos(A) = 1 - sin(A) * sin(A)
, 代入 c1 + c2
:
第一步化简后:
最后的结果就是:
因为 sin, cos
在函数周期内存在负值(见下面角度对应的三角函数周期图),所以线性渐变的长度需要取绝对值。
至此,我们知道了线性渐变长度,文本矩形的中心点坐标很好算,即:
centerX = X + W / 2 centerY = Y + H / 2
所以,起点与终点的坐标分别为:
startX = centerX - cos(A) * halfGradientLineLength startY = centerY + sin(A) * halfGradientLineLength endX = centerX + cos(A) * halfGradientLineLength endY = centerY - sin(A) * halfGradientLineLength
看看最终效果
经验注释
进行三角函数计算时,应尽量避免先用 tan
, 因为 tan
在其周期内存在无穷值,需要做特定的条件判断,而 sin, cos
没有此类问题,代码书写更为简洁清晰并且不会因疏忽产生错误,见下面三角函数与角度的对应关系周期图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在网页设计中,常会遇到让元素在网页居中的需求,那么怎么把元素居中在网页?有什么方法?其实实现元素居中并不难,接下来我们就一起来了解一下。
用css可以实现哪些hover效果?其实使用CSS可以实现很多比较炫酷又好看的hover效果,例如做霓虹灯hover效果、边框hover效果、圆形hover效果等等,这篇文章就给大家分享几个实现hover效果实例,感兴趣的朋友可以参考,接下来我们一起来看看吧。
在css中,可以利用clear属性清除左右浮动,该属性的作用就是规定元素的哪一侧不允许其他浮动元素,当属性的值为“both”时,在元素的左右两侧均不允许浮动元素,也就是清除左右浮动,语法为“元素{clear:both;}”。
这篇文章主要介绍了AmazeUI 加载进度条的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文给大家分享一个使用CSS+JS实现的唯美星空轨迹运动效果,效果非常逼真,下面小编给大家带来了实例代码,需要的朋友参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008