Html5 2d Canvasを使用して、ある種のマップを作成しています。
主な機能はズームとドラッグです。私の問題は、マップのドラッグが非常にぎくしゃくしていることです。私の理解ではアニメーションではないので、requestAnimationフレームを使用できるかどうか、またはどのように使用できるかわかりませんか?
これまでに最適化してきました。1)ズームアウトすると、細部が不必要に描画されません。2)ズームインすると、ビューポートの外側に描画可能なアイテムが描画されません。
(私はキャンバスの描画を除いてJQueryを使用しています)。現在、ユーザーがonmousedownをトリガーすると、各mousemoveイベントがキャンバスを再描画するため、マップをドラッグします。つまり、ユーザーがビューポートに表示する内容を変更します。
だから、単純化:
$(canvas).mousemove(function(e) {
if (mousedown){
dragger.update({x: e.pageX, y: e.pageY});
drawer.drawMap();
}
});
function MapDrawer(...){
this.drawMap = function(){
this.ctx.clearRect(0,0, this.canvasWidth, this.canvasHeight);
this.ctx.save();
this.ctx.transform(...); // map position and zoom
this.selectivelyDrawMapFeatures();
this.ctx.restore();
}
}
requestAnimationFrameでこれを改善できますか?誰かがこれをどのように実装または改善できるかを少しの疑似コードで示すのに十分な情報を提供したことを願っています。
ありがとう