为什么此变量超出范围?JavaScript
why is this variable out of scope? javascript
下面的代码没有运行,我认为这是由于以下行:
alert(nodes[i].getX());
我认为节点[i]超出了范围?如果是这样,为什么?
(我已经注释掉了大部分代码以隔离问题。基本上,代码创建 10 个圆,然后创建 10 条曲线,然后使用 kineticjs 在画布上对它们进行动画处理)。
感谢!
代码:
<html>
<head>
<style>
body {
margin: 0px;
padding: 0px;
}
canvas {
border: 1px solid #9C9898;
}
</style>
<script type="text/javascript" src="http://www.html5canvastutorials.com/libraries/kinetic-v3.9.7.js"></script>
<script>
window.onload = function() {
// global parameters
var curvatureX = 10;
var curvatureY = 10;
var nodeRadius = 10;
var stage = new Kinetic.Stage({
container: "container",
width: 578,
height: 300
});
var layer = new Kinetic.Layer();
var nodes = [];
for (i = 0;i<10;i++){
nodes[i] = new Kinetic.Circle({
x: i*20,
y: i*5,
z:1,
radius: nodeRadius,
fill: "blue",
stroke: "black",
strokeWidth: 4
});
layer.add(nodes[i]);
alert(nodes[i].getX()); // *** THIS ALERT DOES SHOW UP***
}
var edges = [];
for (i = 0;i<10;i++){
edges[i]= new Kinetic.Shape({
drawFunc: function() {
var context = this.getContext();
context.beginPath();
// ***WHERE THE PROBLEM IS ***
alert(nodes[i].getX());
//ALERT DOES NOT SHOW UP + BLANK SCREEN
// context.moveTo(nodes[i].getX(), nodes[i].getY());
// if (nodes[i].getY()-nodes[i+1].getY()<0){
// context.quadraticCurveTo((nodes[i].getX()+nodes[i+1].getX()+curvatureX)/2, (nodes[i].getY()+nodes[i+1].getY()-curvatureY)/2, nodes[i+1].getX(), nodes[i+1].getY());
// }
// else{
// context.quadraticCurveTo((nodes[i].getX()+nodes[i+1].getX()+curvatureX)/2, (nodes[i].getY()+nodes[i+1].getY()+curvatureY)/2, nodes[i+1].getX(), nodes[i+1].getY());
//
// }
context.lineWidth = 10;
// line color
context.strokeStyle = "black";
context.stroke();
},
fill: "#00D2FF",
stroke: "black",
strokeWidth: 4
});
layer.add(edges[i]);
}
stage.add(layer);
var amplitude_1 = 100;
var amplitude_2 = 30;
var period = 2000;
// in ms
var centerX = stage.getWidth() / 2;
var centerY = stage.getHeight() / 2;
stage.onFrame(function(frame) {
for (i=0;i<nodes.length;i++){
nodes[i].setX(amplitude_1 * i * Math.sin(frame.time * 2 * Math.PI / period) + centerX);
nodes[i].setY(amplitude_2 * i+ 20);
}
layer.draw();
});
stage.start();
};
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>
它
显示了。使用开发工具栏执行一些调试。
相关文章:
- 正在全局范围中查找JavaScript函数
- Javascript:'受保护'范围界定
- Javascript innerHTML超出范围的问题
- 可以't访问JavaScript函数范围中的变量
- 用javascript映射和匹配范围
- firefox中的Javascript事件范围问题
- 如何在JavaScript中获取文本区域的选定文本范围
- 从GWT中的HighCharts库(以及一般的Javascript)自定义Stockchart范围选择器按钮
- 获取给定JavaScript范围内的解析函数
- 使用javascript中的var关键字创建块范围的变量
- 为什么在javascript中的模块模式中实现Lazy函数时范围会发生变化
- 用Javascript编辑范围数据(时间序列)
- 为什么此变量超出范围?JavaScript
- 范围 JavaScript 中变量和对象之间的差异
- Struts:getElementByID来自请求范围(Javascript)
- 查找数组/范围javascript中所有丢失的元素
- 定义数组的隔离范围javascript
- 同时更改两个范围- javascript
- 如何获取一周中存在于某个日期范围(Javascript)中的天数列表
- 随机大整数在范围JavaScript