このウェブサイト用に小さな描画スクリプト (キャンバス) を書きました: http://scri.ch/
mousemove
ドキュメントをクリックすると、基本的にすべてのイベントが次のように実行されます。
- 座標を取得します。
-context.lineTo()
このポイントと前のポイントの間
-context.stroke()
線
ご覧のとおり、カーソルを非常に速く動かすと、イベントが十分にトリガーされず (CPU やブラウザーなどによって異なります)、直線がトレースされます。
擬似コード:
window.addEventListener('mousemove', function(e){
myContext.lineTo(e.pageX, e.pageY);
myContext.stroke();
}, false);
これは既知の問題であり、解決策は問題ありませんが、最適化したいと考えています。
stroke()
そのため、mousemove イベントがトリガーされるたびに代わりに、新しい座標を配列キュー内に配置し、タイマーを使用して定期的に描画/空にします。
擬似コード:
var coordsQueue = [];
window.addEventListener('mousemove', function(e){
coordsQueue.push([e.pageX, e.pageY]);
}, false);
function drawLoop(){
window.setTimeout(function(){
var coords;
while (coords = coordsQueue.shift()) {
myContext.lineTo(coords[0], coords[1]);
}
myContext.stroke();
drawLoop();
}, 1000); // For testing purposes
}
しかし、それはラインを改善しませんでした。だから私は点だけを描いてみましたmousemove
。同じ結果: ポイント間のスペースが多すぎます。
最初のコード ブロックは十分に効率的であることに気付きましたmousemove
。イベントのトリガーが遅すぎるだけです。
無駄な最適化を実装するために時間を費やした後、次はあなたの番mousemove
です。DOM スクリプトでトリガー速度を最適化する方法はありますか?
いつでもマウスの位置を「リクエスト」することはできますか?
アドバイスありがとうございます!