javascript - 变量范围冲突Js
问题描述
我正在尝试使用 制作一个简单的动画 Web 应用程序paperjs
,我一直在阅读它的文档,但我无法真正掌握这段代码的工作原理。
js
如果您可以为我提供要搜索的标题,或者我缺少哪些部分。
// To make sure the script isn't executed unless DOM is ready
window.onload = function(){
// Whenever the user clicks on a keyboard button, this event handler is executed
$('body').on('keypress', function(event) {
var path = new paper.Path.Circle({
center: [400, 200],
radius: 10,
fillColor: '#1abc9c'
});
console.log(path.fillColor); // prints undefined
console.log(path.fillColor.hue); // prints undefined
paper.view.onFrame = function(event) {
// On each frame, increment:
path.fillColor.hue += 1; // works fine !!
path.radius -= 1; // doesn't work !!
}
// starts drawing
paper.view.draw();
}
}
第一个问题:第一行path.fillColor.hue
中的未定义如何,console.log()
但里面的第一行paper.view.onframe()
工作正常?
第二个问题:通过与我试图制作另一个缩小我的圆圈半径的动画相同的概念,path.fillColor.hue
所以我正在减少path.radius
我的动画功能,但是,这不起作用 - 尽管没有引发错误。
注意: 1-hue
是一个改变我的圆圈颜色的属性,我从文档中得到它。
2-我试图将我的函数作为解决方案放入paper.view.draw()
我的paper.view.onframe()
函数中,就好像每次paper.view.onframe()
调用它时它都会用新的半径绘制一个新的圆,但这不起作用。
3-我知道我的代码包含大量重复paper.
,并且paperjs
文档有 2 个约定来避免这种情况,但我只是想在提高代码质量之前先把注意力放在最重要的事情上。
4- 这不是完整的代码,我知道 usingJquery
并不是很有用,因为我可以用它来代替它,addEventListener()
但keypress
event 似乎有问题,所以我决定在完成代码并jquery
从我的项目。
解决方案
问题是路径一旦创建就不再是“圆圈”。这只是一条路径。您需要以稍微复杂的方式与之交互以更改半径。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<canvas id="myCanvas" resize="true" width="800" height="800"></canvas>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="paper-full.min.js"></script>
<script>
window.onload = function(){
$('body').on('keypress', function(event) {
paper.setup('myCanvas');
var path = new paper.Path.Circle({
center: [400, 200],
radius: 10,
fillColor: '#1abc9c'
});
paper.view.onFrame = function(event) {
var currentRadius = path.bounds.width / 2,
newRadius = currentRadius - 1;
path.fillColor.hue += 1;
path.scale(newRadius / currentRadius);
}
paper.view.draw();
});
}
</script>
</body>
</html>
我从https://groups.google.com/forum/#!topic/paperjs/xJTDWTQIFwQ获得了必要的信息,其中还讨论了这样做的一个小问题,该问题不适用于您的用例。
推荐阅读
- php - 如何将 IP 号码范围定义为变量
- c - 如何仅使用指针创建动态矩阵结构?
- r - 在r中将列表项输出到csv时设置正确的列名
- dart - 如何从字符串创建 Dart 函数?
- spreadsheet - 电子表格脚本 IFTTT
- java - 如何使用 Selenium Java 在文本框中验证转换后的文本
- angularjs - 为什么 angular.forEach 会被跳过,就好像它不是在做异步一样?
- python - 如果列值等于 NaN 或零,我该如何计算?
- php - 在 Laravel eloquent 中使用中间关系过滤数据透视表数据
- java - java - 如何在java中正确设置csv文件列格式?