如何确定画布何时完成加载
How to determine when a canvas has finished loading
所以我制作了一个相当大的画布,填充了1x1像素,我想为它制作一个加载屏幕。问题是在循环填充画布完成后,它警告它已经完成加载,但画布实际上并没有改变。我在这里做了一个示范。我实际上如何发现当画布实际使用javascript或Jquery加载,是什么导致这种行为?
var ctx=document.getElementById('canvas').getContext('2d');
for(var x=1;x<600;x++){
for(var y=1;y<600;y++){
var color= '#' + Math.floor (Math.random() * 16777215).toString(16);
ctx.fillStyle=color;
ctx.fillRect(x,y,1,1);
}
}
alert('done!');
既然你说jquery是ok的,就在循环完成时触发一个自定义事件。
任何需要画布完全加载的代码都可以在事件处理程序中执行。
// Listen for custom CanvasOnLoad event
$(document).on( "CanvasOnLoad", canvasOnLoadHandler );
var ctx=document.getElementById('canvas').getContext('2d');
for(var x=1;x<600;x++){
for(var y=1;y<600;y++){
var color= '#' + Math.floor (Math.random() * 16777215).toString(16);
ctx.fillStyle=color;
ctx.fillRect(x,y,1,1);
}
// fire CanvasOnLoad when the looping is done
if(x>=599){
$.event.trigger({
type: "CanvasOnLoad"
});
}
}
console.log("...follows the for loops.");
// handle CanvasOnLoad knowing your canvas has fully drawn
function canvasOnLoadHandler(){
console.log("canvas is loaded");
}
这就像一个加载进度动画。从正在运行的函数中更新/推进动画通常不会立即工作(当该函数完成时屏幕更新)。
您的画布代码(自动)封装在onload
函数:window.onload=function(){ /*your code here*/ };
中。
该函数的最后一行是alert('done!');
,所以你自然会在屏幕更新之前得到警报框,你会看到噪音。
一种解决方案是首先设置并显示一个加载图像,然后使用setTimeOut
(例如30ms)渲染画布,用另一个setTimeOut结束画布函数以再次删除加载图像。
注意:你可能知道,你的代码将生成(很多)十六进制颜色,如#3df5
和#5d8a6
,这两个都不是有效的颜色!您还使用了16777215,但是Math.random()需要乘以16777216。要解决这个问题,您可以尝试:color='#'+((Math.random()+1)*16777216|0).toString(16).substr(1);
这里有一些关于随机颜色的好文章。
以JSFiddle结果为例。
相关文章:
- Google Chrome扩展程序可以检测所有脚本何时加载完成吗
- Ember我如何知道路由模板何时完成加载并触发回调
- jQuery-如何检测页面何时完成加载
- BX滑块加载更多幻灯片,检测何时到达终点
- 当浏览器请求部分内容范围请求时,如何检测pdf何时加载到iframe中
- 何时需要JS加载所有模块
- 如何检测通过JSON数据引用的图像何时加载AJAX
- Require.js何时加载文件
- 检测何时加载Facebook Like Button
- 检测所有图像何时加载到角度.js视图中
- 如何查找部分加载何时开始和结束
- 如何知道<嵌入>元素的内容何时加载
- 使用具有
标签的Javascript动态添加HTML.如何判断图像何时加载
- 如何定义何时显示或不显示加载屏幕
- 我怎么知道何时加载了窗口弹出窗口
- 磁头.js - 何时用于提高性能(减少加载时间)
- 如何知道动态加载的CSS文件何时已完全加载并处于活动状态
- 事件,以了解何时加载了多视图页面中的每个视图
- 如何知道外部swf何时加载
- Javascript知道何时加载新页面