我正在尝试学习如何使用HTML5的canvas创建平滑的JavaScript动画。但是,动画不太流畅,而是有些“卡顿”。
您可以在这个jsFiddle上看到我构建的框架,目前只使用Webkit属性。
另一位开发人员使用他们的WebViews源码创建了相同的概念,该源码基于Ext.js。出于学习目的,我希望避免使用任何库,以更好地理解JavaScript。WebViews的概念可以在这个jsFiddle上查看,显示出更加平滑的动画效果。
我已经阅读并尝试了各种不同的方案,从将update调用从requestAnimationFrame中提取到自己的循环中,到将上下文转换为绘制位置,再到绘制到后备缓冲区上并将其复制到视口中。以下代码代表了我迄今为止最好的努力。
请问,有什么建议可以改善性能,以使对象在没有外部库的情况下平滑移动?
先行致谢。
您可以在这个jsFiddle上看到我构建的框架,目前只使用Webkit属性。
另一位开发人员使用他们的WebViews源码创建了相同的概念,该源码基于Ext.js。出于学习目的,我希望避免使用任何库,以更好地理解JavaScript。WebViews的概念可以在这个jsFiddle上查看,显示出更加平滑的动画效果。
我已经阅读并尝试了各种不同的方案,从将update调用从requestAnimationFrame中提取到自己的循环中,到将上下文转换为绘制位置,再到绘制到后备缓冲区上并将其复制到视口中。以下代码代表了我迄今为止最好的努力。
请问,有什么建议可以改善性能,以使对象在没有外部库的情况下平滑移动?
先行致谢。
var app;
var now = then = delta = 0;
var viewport = document.createElement( 'canvas' );
var viewportContext = viewport.getContext( '2d' );
function App( )
{
this.circle = {
position : viewport.width / 2,
radius : 10
};
}
App.prototype.initialize = function( )
{
app = this;
document.body.appendChild( viewport );
viewport.width = 320;
viewport.height = 200;
webkitRequestAnimationFrame( app.render, viewport );
};
App.prototype.render = function( )
{
now = performance.webkitNow( );
delta = ( now - then ) / 1000.0;
then = now;
app.update( delta );
viewportContext.clearRect( 0, 0, viewport.width, viewport.height );
app.draw( viewportContext );
webkitRequestAnimationFrame( app.render, viewport );
};
App.prototype.draw = function( context )
{
context.fillStyle = "white";
context.beginPath( );
context.arc( this.circle.position | 0, viewport.height / 2 | 0, this.circle.radius | 0, 0, Math.PI * 2, true );
context.closePath( );
context.fill( );
};
App.prototype.update = function( deltaTime )
{
this.circle.position += viewport.width / 5 * deltaTime;
if( this.circle.position >= viewport.width )
{
this.circle.position = 0;
}
};
window.onload = function( )
{
new App( ).initialize( );
};
fillStyle
/等),因此可能是需要收集的垃圾。 - Shmiddty