javascript - 我可以给用javascript在画布上绘制的路径提供一个类吗?
问题描述
我正在使用 beginPath() 方法在画布上随机绘制小星星,如下所示:
function makeStars(){
for(let i=0; i<100; i++){
let startingX = Math.floor(Math.random()*canvasWidth);
let startingY = Math.floor(Math.random()*canvasHeight);
ctx.beginPath();
ctx.moveTo(startingX, startingY);
ctx.lineTo(startingX-3,startingY+9.4);
ctx.lineTo(startingX+4.5, startingY+3.5);
ctx.lineTo(startingX-4.5, startingY+3.4);
ctx.lineTo(startingX+3, startingY+9.4);
ctx.closePath();
ctx.fill();
}
是否可以给每条路径一个类?像ctx.classList.add('star');
什么?最终,我希望能够用 CSS 为它们制作动画。
谢谢!
编辑
看起来CSS不是要走的路。我想我会尝试在 setInterval 循环中使用 javaScript 为我的星星设置动画。这是我正在使用的代码笔。闪烁的星星帆布
解决方案
简短的回答是:不。CSS 不会作用于画布上绘制的元素。
在画布上绘图就像直接在纸上绘图。您正在使用 2D 上下文对笔进行操作。虽然您可以找到一种读取 CSS 并执行动画的方法(通过重绘和重绘画布),但我认为这比任何其他替代方法都要困难得多。
如果您打算使用 CSS,另一种选择是使用SVG
+CSS
。中的元素SVG
可以对你的 做出反应CSS
,很像HTML
元素。
如果您绝对必须使用画布,也可以将 SVG 绘制到画布上。将 转换SVG
为 Data URI,然后将该 URI 加载到一个Image
对象中,然后您可以将其putImage
加载到画布上。您必须弄清楚每次SVG
更新时如何绘制,或每隔一段时间轮询新SVG
信息(如requestAnimationFrame
)。
推荐阅读
- python - python cv2溢出RAM
- c - 如何识别 mpegts 文件?
- nginx - Kubeadm Kubernetes 集群无法使用 ingress 将外部 IP 地址映射到域名
- ansible - 如何从ansible库存文件中跳过主机名?
- javascript - 如何将自动对焦设置为选择下拉列表中的输入?
- django - modelManager get_by_natural 密钥方法更改 USERNAME_FIELD 影响我的身份验证?
- typescript - 我怎样才能做 debounceTime 但第一个值
- r - “文件中的错误(文件,“rt”):在读取 1 个 .csv 文件时,“描述”参数无效”
- azure - Azure DevOps 部署到具有不同 SPN 的同一订阅中的资源组
- angular - 为什么我的 Angular 模板中的数据会出现“未定义”错误?