为什么画布动画会卡在ios上?是写作问题吗?
var?num?=?200;
var?w?=?window.innerWidth
var?h?=?window.innerHeight
var?麦克斯。=?100;
var?_x?=?0;
var?_y?=?0;
var?_z?=?150;
var?dtr?=?功能(d)?{
回归?d?*?数学。圆周率?/?180;
};
var?rnd?=?函数()?{
回归?math . sin(math . floor(math . random()?*?360)?*?数学。圆周率?/?180);
};
var?dist?=?函数(p1,?p2,?p3)?{
回归?Math.sqrt(Math.pow(p2.x?-?p1.x,?2)?+?Math.pow(p2.y?-?p1.y,?2)?+?Math.pow(p2.z?-?p1.z,?2));
};
var?小卡。=?{
obj:?{
x:?_x,
y:?_y,
z:?_z
},
dest:?{
x:?0,
y:?0,
z:?1
},
距离:?{
x:?0,
y:?0,
z:?200
},
ang:?{
cplane:?0,
splane:?0,
ctheta:?0,
圣塔:?0
},
缩放:?1,
显示:?{
x:?w?/?2,
y:?h?/?2,
z:?0
},
upd:?函数()?{
cam.dist.x?=?cam.dest.x?-?cam . obj . x;
凸轮区y?=?卡姆.德斯蒂?-?cam . obj . y;
cam.dist.z?=?cam.dest.z?-?cam . obj . z;
cam.ang.cplane?=?-cam.dist.z?/?Math.sqrt(cam.dist.x?*?cam.dist.x?+?cam.dist.z?*?cam . dist . z);
cam.ang.splane?=?cam.dist.x?/?Math.sqrt(cam.dist.x?*?cam.dist.x?+?cam.dist.z?*?cam . dist . z);
cam.ang.ctheta?=?Math.sqrt(cam.dist.x?*?cam.dist.x?+?cam.dist.z?*?cam.dist.z)?/?Math.sqrt(cam.dist.x?*?cam.dist.x?+?凸轮区y?*?凸轮区y?+?cam.dist.z?*?cam . dist . z);
cam.ang.stheta?=?-卡姆.迪什?/?Math.sqrt(cam.dist.x?*?cam.dist.x?+?凸轮区y?*?凸轮区y?+?cam.dist.z?*?cam . dist . z);
}
};
var?trans?=?{
零件:?{
sz:?函数(p,?sz)?{
回归?{
x:?p.x?*?sz.x,
y:?p.y?*?深圳市,
z:?p.z?*?深圳
};
},
腐:?{
x:?函数(p,?腐)?{
回归?{
x:?p.x,
y:?p.y?*?Math.cos(dtr(rot.x))?-?p.z?*?Math.sin(dtr(rot.x)),
z:?p.y?*?Math.sin(dtr(rot.x))?+?p.z?*?Math.cos(dtr(rot.x))
};
},
y:?函数(p,?腐)?{
回归?{
x:?p.x?*?Math.cos(dtr(rot.y))?+?p.z?*?Math.sin(dtr(rot.y)),
y:?p.y,
z:?-p.x?*?Math.sin(dtr(rot.y))?+?p.z?*?Math.cos(dtr(rot.y))
};
},
z:?函数(p,?腐)?{
回归?{
x:?p.x?*?Math.cos(dtr(rot.z))?-?p.y?*?Math.sin(dtr(rot.z)),
y:?p.x?*?Math.sin(dtr(rot.z))?+?p.y?*?Math.cos(dtr(rot.z)),
z:?pz
};
}
},
pos:?函数(p,?pos)?{
回归?{
x:?p.x?+?位置x,
y:?p.y?+?位置y,
z:?p.z?+?位置z
};
}
},
pov:?{
平面:?函数(p)?{
回归?{
x:?p.x?*?cam.ang.cplane?+?p.z?*?cam.ang.splane,
y:?p.y,
z:?p.x?*?-cam.ang.splane?+?p.z?*?cam.ang.cplane
};
},
θ:?函数(p)?{
回归?{
x:?p.x,
y:?p.y?*?cam.ang.ctheta?-?p.z?*?cam.ang.stheta,
z:?p.y?*?cam.ang.stheta?+?p.z?*?cam.ang.ctheta
};
},
设置:?函数(p)?{
回归?{
x:?p.x?-?cam.obj.x,
y:?p.y?-?cam.obj.y,
z:?p.z?-?cam.obj.z
};
}
},
透视:?函数(p)?{
回归?{
x:?p.x?*?cam.dist.z?/?p.z?*?cam.zoom,
y:?p.y?*?cam.dist.z?/?p.z?*?cam.zoom,
z:?p.z?*?cam.zoom,
p:?cam.dist.z?/?pz
};
},
显示:?函数(p,?disp)?{
回归?{
x:?p.x?+?disp.x,
y:?-派伊?+?显示,
z:?p.z?+?显示z,
p:?p.p
};
},
步骤:?函数(_obj_,?sz,?腐,?pos,?disp)?{
var?_args?=?trans.parts.sz(_obj_,?SZ);
_args?=?trans.parts.rot.x(_args,?腐);
_args?=?trans.parts.rot.y(_args,?腐);
_args?=?trans.parts.rot.z(_args,?腐);
_args?=?trans.parts.pos(_args,?pos);
_args?=?trans . POV . plane(_ args);
_args?=?trans . POV . theta(_ args);
_args?=?trans . POV . set(_ args);
_args?=?trans . persp(_ args);
_args?=?trans.disp(_args,?disp);
回归?_ args
}
};
(函数()?{
“用吗?严格”;
var?三个d?=?函数(参数)?{
这个. transIn?=?{};
这个. transOut?=?{};
this.transIn.vtx?=?(param . vtx);
this.transIn.sz?=?(param . SZ);
this.transIn.rot?=?(param . rot);
this.transIn.pos?=?(param . pos);
};
threeD.prototype.vupd?=?函数()?{
这个. transOut?=?交易步骤(
this.transIn.vtx,
this.transIn.sz,
this.transIn.rot,
this.transIn.pos,
凸轮显示
);
};
var?建造?=?函数()?{
这个.维尔?=?0.04;
这个,林?=?360;
this.diff?=?200;
this.initPos?=?100;
这个。毒理?=?_ x;
这个玩具?=?_ y;
this . go();
};
Build.prototype.go?=?函数()?{
这个.画布?=?document . getelementbyid(" canv ");
这个.画布.宽度?=?window.innerWidth
这个.画布.高度?=?window.innerHeight
这个。$?=?canv . get context(" 2d ");
这个。$.globalCompositeOperation?=?“源-结束”;
这个. varr?=?[];
this.dist?=?[];
this.calc?=?[];
为了什么?(var?我?=?0,?莱恩。=?num?我?& lt?len?i++)?{
this . add();
}
这个. rotObj?=?{
x:?0,
y:?0,
z:?0
};
this.objSz?=?{
x:?w?/?5,
y:?h?/?5,
z:?w?/?五
};
};
Build.prototype.add?=?函数()?{
this.varr.push(新?threeD({
vtx:?{
x:?rnd(),
y:?rnd(),
z:?rnd()
},
sz:?{
x:?0,
y:?0,
z:?0
},
腐:?{
x:?20,
y:?-20,
z:?0
},
pos:?{
x:?this.diff?*?Math.sin(360?*?Math.random()?*?数学。圆周率?/?180),
y:?this.diff?*?Math.sin(360?*?Math.random()?*?数学。圆周率?/?180),
z:?this.diff?*?Math.sin(360?*?Math.random()?*?数学。圆周率?/?180)
}
}));
this.calc.push({
x:?360?*?Math.random(),
y:?360?*?Math.random(),
z:?360?*?Math.random()
});
};
Build.prototype.upd?=?函数()?{
cam.obj.x?+=?(this.toX?-?cam.obj.x)?*?0.05;
cam.obj.y?+=?(this.toY?-?cam.obj.y)?*?0.05;
};
Build.prototype.draw?=?函数()?{
这个。$.clearRect(0,0,?this.canvas.width,?this . canvas . height);
cam . upd();
this.rotObj.x?+=?0.1;
this.rotObj.y?+=?0.1;
this.rotObj.z?+=?0.1;
为了什么?(var?我?=?0;?我?& lt?this . varr . length;?i++)?{
为了什么?(var?瓦尔。在?this.calc[i])?{
如果?(this.calc[i]。hasOwnProperty(val))?{
this.calc[i][val]?+=?this.vel
如果?(this.calc[i][val)?& gt?this.lim)?this.calc[i][val]?=?0;
}
}
this.varr[i].transIn.pos?=?{
x:?this.diff?*?Math.cos(this.calc[i])。x?*?数学。圆周率?/?180),
y:?this.diff?*?Math.sin(this.calc[i])。y?*?数学。圆周率?/?180),
z:?this.diff?*?Math.sin(this.calc[i])。z?*?数学。圆周率?/?180)
};
this.varr[i].transIn.rot?=?this.rotObj
this.varr[i].transIn.sz?=?this.objSz
this.varr[i]。vupd();
如果?(this.varr[i].transOut.p?& lt?0)?继续;
var?g?=?这个。$.createaradialgradient(this . varr[I]. transout . x,?this.varr[i].transOut.y?this.varr[i].transOut.p,?this.varr[i].transOut.x,?this.varr[i].transOut.y?this.varr[i].transOut.p?*?2);
这个。$.globalCompositeOperation?=?打火机';
g.addColorStop(0,hsla(255,?255%,?255%,?1)');
g.addColorStop(.5,?HSLA(’?+?(我?+?2)?+?',85%,?40%,1)');
g.addColorStop(1,?HSLA(’?+?(一)?+?',85%,?40%,.5)');
这个。$.fillStyle?=?g;
这个。$.begin path();
这个。$.arc(this.varr[i].transOut.x,?this.varr[i].transOut.y?this.varr[i].transOut.p?*?2,?0,?数学。圆周率?*?2,?假);
这个。$.fill();
这个。$.close path();
}
};
Build.prototype.anim?=?函数()?{
window.requestAnimationFrame?=?(函数()?{
回归?window.requestAnimationFrame?||
函数(回调,?元素)?{
window.setTimeout(回调,?1000?/?60);
};
})();
var?动漫?=?函数()?{
this . upd();
this . draw();
window . requestanimationframe(anim);
}.绑定(这个);
window . requestanimationframe(anim);
};
Build.prototype.run?=?函数()?{
this . anim();
window . addevent listener(' mousemove ',?功能(e)?{
这个。毒理?=?(e.clientX?-?这个.画布.宽度?/?2)?*?-0.8;
这个玩具?=?(e.clientY?-?这个.画布.高度?/?2)?*?0.8;
}.绑定(这个));
window . addevent listener(' touch move ',?功能(e)?{
如果?(event.cancelable)?{
如果?(!event.defaultPrevented)?{
event . prevent default();
}
}
这个。毒理?=?(e.touches[0])。clientX?-?这个.画布.宽度?/?2)?*?-0.8;
这个玩具?=?(e.touches[0])。客户?-?这个.画布.高度?/?2)?*?0.8;
}.绑定(这个));
window . addevent listener(' mousedown ',?功能(e)?{
为了什么?(var?我?=?0;?我?& lt?100;?i++)?{
this . add();
}
}.绑定(这个));
window . addevent listener(' touch start ',?功能(e)?{
如果?(event.cancelable)?{
如果?(!event.defaultPrevented)?{
event . prevent default();
}
}
为了什么?(var?我?=?0;?我?& lt?100;?i++)?{
this . add();
}
}.绑定(这个));
};
var?app?=?新的?build();
app . run();
})();
window . addevent listener(' resize ',?函数()?{
画布宽度?=?w?=?window.innerWidth
帆布。高度?=?h?=?window.innerHeight
},?假);