javascript - 将纸张js转换为javascript
问题描述
下面是我试图在圆圈网格上实现色调属性的代码。
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/
解决方案
您遇到了时间问题。当您的普通 JS 运行时,circles
尚未定义。那是因为您的纸质脚本位于<script type="text/paperscript">
元素内部。浏览器本身不支持此功能,因此不会立即运行。相反,在您加载后的某个时间paper.js
,它最终会读取您的脚本元素并对其进行解释。
您需要确保circles
在定义之前不要尝试访问。如果无法预测您的paperscript何时准备就绪,您可以在 paperscript 运行时使用回调来通知外部 JS。例如,如果您将其添加到您的paperscript:
if (window.onCirclesReady)
window.onCirclesReady(circles);
...你可以把你的JS包装在这个:
window.onCirclesReady = circles => {
// Code here
};
这解决了两个问题。首先,您知道您的 JS 代码在 paperscript 运行之前不会运行。其次,您正在传递circles
数组,因此您不必使用全局变量来使其可访问。您可以根据需要扩展回调以传递其他数据。
推荐阅读
- python - 如何在基于两个变量的单个语句中减少 if 和 elif
- c++ - 在 Qt C++ 中绘制 HSV 色轮
- python - 使用世界坐标查找相机之间的变换
- python - 如何根据对象是否存在加载/不加载分页?姜戈
- c# - SFXCA:无法通过 RUNDLL32 创建新的 CA 进程。错误代码:5
- cmake - 如何使用 CMake 创建插件注册表?
- rest - Magento 2 (2.3) Rest API 不适用于参数
- ios - 无法在 CLLocation Swift 数组中获取索引
- javascript - 为什么这段代码不生成数字 0?
- kubernetes - 如何在 Openshift 模板中对对象的创建进行排序