javascript - 画布中的 Progresswheel 类型的东西不会以所需的百分比停止。开始未定义的价值
问题描述
今天只是一个快速的(我希望)
下面的代码生成一个介于 0-28 之间的随机数,然后将该数字传递给我的进度条函数。进度条功能应该在达到生成的数字时停止,但事实并非如此,因为我的值未定义。有谁知道为什么?我正在寻找,但我只是看不到问题所在。任何你能解释它的光都将不胜感激
function getRandInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var canvas = document.getElementById('myCanvas'); // to get the element
var context = canvas.getContext('2d'); //to return drawing context on canvas
var al=0; // use it for Amount loaded
var start=4.72; //From where to start position of progress;
var cw=context.canvas.width/2; //to get x cordinate;
var ch=context.canvas.height/2; // to get y coordinate;
//here width and height is divided by two so to get our progressbar in middle.
var diff; //to load progress bar Slowly
function progressBar(numGiven) {
var perc = ((numGiven / 28) * 100);
diff = (al / 100) * Math.PI * 2;
context.clearRect(0, 0, 400, 200);
context.beginPath();
context.arc(cw, ch, 50, 0, 2 * Math.PI, false);
context.fillStyle = '#FFF';
context.fill();
context.strokeStyle = '#e7f2ba';
context.stroke();
context.fillStyle = '#000';
context.strokeStyle = '#b3cf3c';
context.textAlign = 'center';
context.lineWidth = 15;
context.font = '10pt Verdana';
context.beginPath();
context.arc(cw, ch, 50, start, diff + start, false);
context.stroke();
// old value to show percent al + '%'
context.fillText(numGiven + "/ 28", cw + 2, ch + 6);
if (al >= perc) {
clearTimeout(bar);
}
al++;
}
var bar = setInterval(progressBar, 50);
//check for Navigation Timing API support
if (window.performance) {
alert("window.performance works fine on this browser");
}
if (performance.navigation.type == 1) {
alert("This page is reloaded");
progressBar(getRandInt(0, 28))
} else {
alert("This page is not reloaded");
progressBar(0);
}
解决方案
通过快速查看您的代码,我注意到您使用 setInterval 定期更新进度条,但您使用 clearTimeout 清除它。您应该改用 clearInterval。让我知道这是错误的。
编辑:上面我注意到的事情是错误的。
您的间隔调用没有参数的 progressBar 函数,因此 numGiven 未定义。为了给你的函数提供数字,你应该删除你的 setInterval 并用这个替换你的progressBar函数中的条件:
if (al < perc) {
setTimeout(function(){ progressBar(numGiven) }, 50);
}
如果您想改用间隔,则必须将 numGiven 设置为全局变量并直接在您的 progressBar 函数中访问它。
推荐阅读
- python - 如何使用 Python 从 GitHub 下载文件
- python - 为什么新的 osmnx 'nearest_nodes' 函数返回的结果与旧函数 'get_nearest_node' 不同?
- reactjs - 带有选择器的启用和禁用按钮反应原生
- docker - 如何在 yml 文件中的 Github Action 中部署 docker 容器?
- angular - “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗?
- android - Android Kotlin AccountPicker.newChooseAccountIntent() 与 com.google 以外的其他提供商一起使用
- python - 使用具有数据类型的 dict 转换 Pandas 数据框列的数据类型的最佳方法是什么?
- django - 后台任务 Django Heroku
- json - GraphQL 到 JSON 解析?
- delphi - 是否有一种简单的方法可以复制包含其内容但没有子文件夹的文件夹?