2012-04-23 137 views
3

我写我自己的草图处理并将其插入使用processingjs在页面上和Ajax像这样:如何知道处理js草图何时被加载?

$.getScript("js/libs/processingjs.js", function() { 
    $('#sketch').each(function() { 
     Processing.loadSketchFromSources(this, [$(this).data('processing-sources')]); 

    }); 
}); 

这里画布#sketch指的是:

<canvas data-processing-sources="first-sketch.pde" id='sketch'></canvas> 

这工作,但我也想用Javascript使用草图进行交互。当我在(萤火虫)键入此控制台一切都很正常:

var sketch = Processing.getInstanceById('sketch'); 
sketch.addTweet(30, 30, 100); 

(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 

我觉得草图并没有在这一点上被加载,有回调或运行代码有道一旦它已经加载?

我包括在script标签processingjs LIB时收到同样的错误。并在jQuery.ready上运行代码。

+0

似乎这还没有解决。 [这是一些见解](https://processing-js.lighthouseapp.com/projects/41284/tickets/1887)。 – 2012-08-24 03:40:20

+0

我会建议只是轮询'setInterval',直到实例不再返回'undefined' – 2012-08-24 03:42:10

回答

1

这里是我的东西放在一起我的一个项目。这不是很好,但它完成了工作(现在)。

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); 
0

问题是loadSketchFromSources不同步。

的回调已添加(github上,最新的)到loadSketchFromSources功能。所以你可以写下你的代码:

$.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

+0

真棒,看到这是最终添加:) – askmike 2015-09-28 08:47:52

相关问题