findxy 関数はキャンバスの絶対位置を使用します。これはスクロールしても変化しませんが、clientX/clientY はキャンバスに対して相対的に変化します。
代わりに getBoundingClientRect() からの情報を使用して、マウス座標をキャンバス座標空間に移動できます。
これを試して:
function findxy(res, e) {
var rect = canvas.getBoundingClientRect();
if (res == 'down') {
prevX = currX;
prevY = currY;
currX = e.clientX - rect.left;
currY = e.clientY - rect.top
flag = true;
dot_flag = true;
if (dot_flag) {
ctx.beginPath();
ctx.fillStyle = x;
ctx.fillRect(currX, currY, 2, 2);
ctx.closePath();
dot_flag = false;
}
}
if (res == 'up' || res == "out") {
flag = false;
}
if (res == 'move') {
if (flag) {
prevX = currX;
prevY = currY;
currX = e.clientX - rect.left;
currY = e.clientY - rect.top
draw();
}
}
}
getBoundingClientRect() は、ビュー ポート (clientX/clientY と同じ) に対するキャンバスの座標をフェッチするため、スクロールの影響を受けません。