konvajs - Konva.js - 在时间间隔循环中绘制舞台
问题描述
我正在尝试使用 Konva.js 每 250 毫秒在时间循环中绘制多个矩形,但画布仅在循环完成后更新。我究竟做错了什么?
function sleep(milliseconds) {
const date = Date.now();
let currentDate = null;
do {
currentDate = Date.now();
} while (currentDate - date < milliseconds);
}
var width = window.innerWidth;
var height = window.innerHeight;
var stage = new Konva.Stage({
container: 'container',
width: width,
height: height,
});
var layer = new Konva.Layer();
stage.add(layer);
for (let i=0; i < 10; i++){
var rect1 = new Konva.Rect({
x: i*25,
y: 20,
width: 20,
height: 20,
fill: 'red'
});
layer.add(rect1);
layer.draw();
sleep(250);
}
解决方案
您的sleep
方法阻塞了主 JS 线程。您需要使用异步方法等待。有很多方法可以做到这一点。使用现代 js,您可以这样做:
// noprotect
const stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight
});
const layer = new Konva.Layer();
stage.add(layer);
const delay = (time) => new Promise(resolve => setTimeout(resolve, time));
async function startAddingShapes() {
for (let i=0; i < 10; i++){
const rect = new Konva.Rect({
x: i*25,
y: 20,
width: 20,
height: 20,
fill: 'red'
});
layer.add(rect);
await delay(250);
}
}
startAddingShapes();
推荐阅读
- javascript - 使搜索框不区分大小写
- reactjs - Facebook 登录重定向 uri 错误:url 被阻止,重定向失败
- graphql - graphQLErrors 未定义,如何从 apollo 响应中提取错误
- javascript - 在现有项目中配置 jest 和酶会引发错误
- java - 在 Java 代码中使用纯文本凭据的替代策略
- c# - 我无法安装软件包 System.Net.Http.WebRequest
- pipe - 如何将vlc的输入更改为fifo
- c# - 在 C# 中从 HDF5 文件加载数据集
- java - 如何在 servlet 上读取 CSV 文件数据,作为表单数据发送
- excel - 对单元格 E1 + F1 求和并将答案放在 E1 中?这可能吗?