Javascript 如何知道processingjs草图何时加载?
我在processing中编写了自己的草图,并使用processingjs和ajax将其插入页面,如下所示:Javascript 如何知道processingjs草图何时加载?,javascript,jquery,processing,Javascript,Jquery,Processing,我在processing中编写了自己的草图,并使用processingjs和ajax将其插入页面,如下所示: $.getScript("js/libs/processingjs.js", function() { $('#sketch').each(function() { Processing.loadSketchFromSources(this, [$(this).data('processing-sources')]); }); }); 这是画布#草图指
$.getScript("js/libs/processingjs.js", function() {
$('#sketch').each(function() {
Processing.loadSketchFromSources(this, [$(this).data('processing-sources')]);
});
});
这是画布#草图指的是:
<canvas data-processing-sources="first-sketch.pde" id='sketch'></canvas>
(addTweet是草图的一个功能,加载草图后可用)
但当我把它放在javascript中时,就像这样:
$.getScript("js/libs/processingjs.js", function() {
$('#sketch').each(function() {
Processing.loadSketchFromSources(this, [$(this).data('processing-sources')]);
var sketch = Processing.getInstanceById('sketch');
sketch.addTweet(30, 30, 100);
});
});
我得到一个错误:
Uncaught TypeError: Cannot call method 'addTweet' of undefined
我认为现在还没有加载草图,是否有一个回调或一个正确的方法来运行加载后的代码
在
脚本
标记中包含processingjs库时,我收到了相同的错误。在jQuery.ready上运行代码。下面是我为我的一个项目准备的东西。这并不漂亮,但它完成了工作(目前)
问题是loadSketchFromSources不是同步的 已向loadSketchFromSources函数添加回调(github,最新版本)。因此,您可以将代码编写为:
$.getScript("js/libs/processingjs.js", function() {
$('#sketch').each(function() {
Processing.loadSketchFromSources(this, [$(this).data('processing-sources')], function(sketch) {
sketch.addTweet(30, 30, 100);
});
});
});
您也可以使用类而不是id。在回调中抓取草图,您不需要使用
getInstanceById
这似乎还没有解决。我建议只需轮询setInterval
,直到实例不再返回undefined
Awesome,看到它最终被添加:)
var timer = 0,
timeout = 3000,
mem = setInterval(function () {
var sketch = Processing.getInstanceById("processingCanvas");
if (sketch) {
console.log("SKETCH HAS LOADED");
clearInterval(mem);
} else {
timer += 10;
if (timer > timeout) {
console.log("FAILED TO LOAD SKETCH");
clearInterval(mem);
}
}
}, 10);
$.getScript("js/libs/processingjs.js", function() {
$('#sketch').each(function() {
Processing.loadSketchFromSources(this, [$(this).data('processing-sources')], function(sketch) {
sketch.addTweet(30, 30, 100);
});
});
});