首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道何时加载了processingjs草图?

如何知道何时加载了processingjs草图?
EN

Stack Overflow用户
提问于 2012-04-23 21:42:59
回答 2查看 619关注 0票数 3

我在processing中编写了自己的草图,并使用processingjs和ajax将其插入到页面上,如下所示:

代码语言:javascript
复制
$.getScript("js/libs/processingjs.js", function() {
    $('#sketch').each(function() {
        Processing.loadSketchFromSources(this, [$(this).data('processing-sources')]);

    });
});

这是#sketch所指的画布:

代码语言:javascript
复制
<canvas data-processing-sources="first-sketch.pde" id='sketch'></canvas>

这工作,但我也想与草图使用Javascript交互。当我在我的(firebug)控制台中输入这段代码时,一切都很正常:

代码语言:javascript
复制
var sketch = Processing.getInstanceById('sketch');
sketch.addTweet(30, 30, 100);

(addTweet是草图的一个函数,一旦草图加载就可以使用),但是当我将它放在javascript中时,如下所示:

代码语言: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);

    });
});

我得到了错误:

代码语言:javascript
复制
Uncaught TypeError: Cannot call method 'addTweet' of undefined

我认为草图在这一点上还没有加载,有没有回调或加载后运行代码的适当方式?

script标记中包含processingjs时,我收到了相同的错误。并在jQuery.ready上运行代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-24 13:13:05

这是我为我的一个项目准备的东西。它并不美观,但它(目前)完成了工作。

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2015-09-24 13:45:32

问题是loadSketchFromSources是不同步的。

在loadSketchFromSources函数中添加了一个回调函数(github,latest)。所以你可以把你的代码写成:

代码语言:javascript
复制
$.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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10281747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档