网上的一个 3D 标签云的插件,其中用到了数组循环方法 forEach ,不过我把循环改成 for 循环之后,效果就会出错。
这是原本的 forEach 的代码:
Array.prototype.forEach = function(callback){ for(var i=0;i<this.length;i++){ callback.call(this[i]); }}function rotateY(){ var cos = Math.cos(angleY); var sin = Math.sin(angleY); tags.forEach(function(){ var x1 = this.x * cos - this.z * sin; var z1 = this.z * cos + this.x * sin; this.x = x1; this.z = z1; })}
我改成了 for 循环后就完全不对。
function rotateY(){ var cos = Math.cos(angleY); var sin = Math.sin(angleY); for( var i=0 ,length=tags.length;i<length;i++){ var x1 = tags[i].x * cos - tags[i].z * sin; var z1 = tags[i].z * cos + tags[i].x * sin; tags[i].x = x1; tags[i].z = z1; }}
这是这个 demo 的完整代码 http://codepen.io/zengkan0703... ,
这是我修改成 for 循环的效果 http://codepen.io/zengkan0703...
更新:由于粗心把 + 写成了 - ,太尴尬了,耻辱柱。
解决方案
你这错误,跟你的描述并不一样。太粗心了。