以下是我尝试通过这些代码来实现圆形网格上的hue属性的代码。
var circles = [];
for(var i=20 ; i<=1500 ; i+=100){
for(var j=40 ; j<=600 ; j+=110){
var newCircle = new Path.Circle(new Point(i, j), 20);
newCircle.fillColor = 'red';
circles.push(newCircle);
}
}
function onFrame(event){
for(var i=0 ; i<circles.length ; i++ ){
circles[i].fillColor.hue += 1;
}
}
这是代码。现在,我尝试使用我在单独的JS文件中创建的随机颜色函数为每个圆圈赋予不同的颜色,但是该js文件中无法访问“ num”之类的变量。我无法链接它们。
这是codepen的链接:https://codepen.io/akashyap/pen/qMgpGQ
我无法弄清楚以下内容的“在JavaScript中直接使用paperscript”部分:
http://paperjs.org/tutorials/getting-started/using-javascript-directly/
答案 0 :(得分:0)
您遇到了计时问题。当普通JS运行时,circles
尚未定义。这是因为您的书面脚本位于<script type="text/paperscript">
元素内。浏览器本身不支持此功能,因此不会立即运行。相反,在加载paper.js
之后的一段时间,它最终会读取并解释脚本元素。
您需要确保在定义circles
之前不要尝试访问它。
如果您的 paperscript 准备就绪时无法预料,则可以在脚本运行后使用 callback 通知外部JS。例如,如果将其添加到您的脚本中:
if (window.onCirclesReady)
window.onCirclesReady(circles);
...您可以在其中包装JS:
window.onCirclesReady = circles => {
// Code here
};
这解决了两个问题。首先,您知道您的JS代码只有在paperscript运行后才能运行。其次,您正在传递circles
数组,因此您不必使用全局变量来使其可访问。您可以根据需要扩展回调以传递其他数据。