从外部调用 paperscript 中的函数

Call a function inside paperscript from outside

我有 3 个 JS 文件。

  1. main.js
  2. map.js
  3. legend.js

map.js 和 legend.js 是 2 种不同画布的论文。 他们是这样从 HTML 调用的。

<script type="text/javascript" src="main.js"></script>
<script type="text/paperscript" src="map.js" canvas="mapCanvas"></script>
<script type="text/paperscript" src="legend.js" canvas="legendCanvas"></script>

map.js中,我们有一个名为drawMap()

的函数

legend.js中,我们有一个名为drawLegend()

的函数

显然他们操纵自己的画布。

要求: 我想从 main.js.

调用那些函数

我看过这个post Paperscope and paperjs

并遵循这些说明 https://groups.google.com/forum/#!msg/paperjs/C6F0XFlplqM/_67AMqCR_nAJ

但我不确定如何以及在何处构建和调用 PaparScope 对象。

还是不行。

这很接近:Paper.js Interoperability

但我需要的是反过来

您需要将要从外部调用的函数导出,例如:

window.drawMap = drawMap;
window.drawLegend = drawLegend;

然后它们成为全局变量,您可以从外部调用它们。

一种更优雅的方式可能是在全局范围内定义一个容器,例如(在 PaperScript 代码之前执行的正常 JavaScript 脚本标记中,例如在您的 main.js 中):

var globals = {};

然后以相同的方式从 PaperScript 访问并填充此容器:

globals.drawMap = drawMap;
globals.drawLegend = drawLegend;

之后,您可以从任何 JavaScript 或 PaperScript 使用它们:

globals.drawMap();
globals.drawLegend();

更新:

由于您使用多个 PaperScope(由绑定到 canvases 的 PaperScript 代码创建),您需要在调用处理给定 [=40] 的函数之前激活正确的范围=].最好直接在 drawMap()drawLegend() 函数中执行此操作,这样从外部调用时就不必担心。

在 PaperScript 内部,this 指向作用域,所以你可以在函数外部做这样的事情:

var scope = this;

然后在函数内部:

scope.activate();