这两天我一直在努力解决的问题有点奇怪,所以我不确定如何在标题中指定它。
我有一个 KineticJs Line,它有一个点数组(line.attrs.points),形式为具有 x 和 y 值的对象。在拖动某个 Kinetic 元素时,我想动态地向线条添加点并重新绘制它。(例如:线条看起来像这样:\ _ _ _ / 并且在某些条件下拖动另一个形状时我想动态添加一个点并使其看起来像这样:\ _ / \ _ /)所以,当满足该条件时在另一个形状的 dragmove 事件中,我使用以下代码:
line.attrs.points.push({x:xValue, y:yValue});
line.attrs.points.sort(function(a,b){
return a.x > b.x; // I tried with a.x - b.x and with short if-s which return only -1, 0 or 1, still nothing happened
});
line.setPoints(line.attrs.points);
layer.draw();
但是这些点没有排序,所以这条线会到达某个 x,然后返回到一个较小的 x,然后再继续前进,这不是我在获得某种点之后所期望的行为!
奇怪的是,当我使用 console.log(line.attrs.points); 对于三个连续的点加法(每次加法+2 点),我得到以下输出:
[Object, Object, Object, Object, Object, Object]
[Object, Object, Object, Object, Object, Object, Object, Object]
[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
但是当我打开数组时,每个数组中有 10 个对象。怎么可能打开一个包含 6 个对象的数组并在其中看到 10 个对象(我使用的是 Google Chrome 的默认控制台)?会不会是 console.log 是异步的并在所有添加发生后记录它们?
主要问题是那种点不起作用,但我仍然很高兴理解为什么控制台表现得如此奇怪。
提前感谢您的长时间解释!