この関数を使用してマウス座標をキャンバス上の座標に変換していますが、下にスクロールしてから上にスクロールすると、キャンバス上のマウスの位置が一致しないことがあります。関数は次のとおりです。
function getMousePos(x, y) {
var rect = document.getElementById("canvas").getBoundingClientRect();
return {
x: x - rect.left,
y: y - rect.top
};
}