【问题标题】:Paper.js InteroperabilityPaper.js 互操作性
【发布时间】:2014-08-17 19:25:42
【问题描述】:

我想从页面中的 HTML 按钮调用 paper.js 函数,但我相信 paper.js 函数存在于它们自己的范围内。 paper.js 文档提到了互操作性,这听起来像是正确的直接然后将我带到一个显示“即将推出”的页面:

http://paperjs.org/tutorials/getting-started/paperscript-interoperability/

有谁知道如何从我的 HTML 页面调用在 paper.js 脚本中创建的函数?

【问题讨论】:

    标签: javascript html interop paperjs


    【解决方案1】:

    对于缺少的教程表示歉意。最后我真的会花点时间来写它。

    我去年在邮件列表中回答了这个问题:https://groups.google.com/d/msg/paperjs/C6F0XFlplqM/_67AMqCR_nAJ

    Scoped PaperScript 在全局范围内运行,并且可以访问全局范围内的所有元素。在全局范围(= 窗口)中运行的普通 JavaScript 不会看到这些 PaperScope,也无法访问它们的变量。

    有一个简单的解决方案可以在两者之间交换信息:只需声明一个用于来回交换信息的全局结构,例如

    window.globals = {
        someValue: 10,
        someFunction: function() { alert(globals.someValue); }
    };
    

    在您的 PaperScript 中,您可以通过“全局”简单地访问它,因为它在窗口范围内:

    globals.someValue = 20;
    globals.someFunction();
    

    同样,您可以在普通 JavaScript 中使用这种结构。

    【讨论】:

    • 感谢您的评论,但与文档的其余部分相比,它仍然有点模糊。互操作性页面有什么进展吗?
    • 谢谢,这是可行的,但我怎样才能禁用纸质脚本的行为,我想通过 jquery 点击事件来驱动我所有的纸质脚本功能
    【解决方案2】:

    我只是想为遇到此问题的任何人添加一些说明。

    对于 PaperScript 到 JavaScript 的互操作性,请执行以下操作...

    在 HTML 文件中:

    <button type="button" id="btn">Click Me!</button>
    

    在 JavaScript 文件中:

    $(document).ready(init);
    
    function init(jQuery) {
      $("#btn").click(window.globals.paperClicked);
    }
    
    // PaperScript Interop
    window.globals = {
      paperClicked: function() {}
    }
    

    在 PaperScript 文件中:

    // JavaScript Interop
    globals.paperClicked = internalClicked;
    
    function internalClicked() {
      alert('clicked!');
    }
    

    【讨论】:

    • 谢谢,这是可行的,但我怎样才能禁用纸质脚本的行为,我想通过 jquery 点击事件来驱动我所有的纸质脚本功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2010-12-27
    • 2019-07-15
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多