Já que eu tenho como conseguir a posição do mouse e tenho como controlar a bolinha...
... por que não juntar as duas coisas e colocar um pouco de Física pra modelar um sistema de gravitação.
Acho que o resultado fica legal.
<meta charset="UTF-8">
<canvas width="600" height="400"></canvas>
<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);
function desenhaCirculo(x, y, raio){
pincel.fillStyle = 'blue';
pincel.beginPath();
pincel.arc(x, y, raio, 0, 2*Math.PI);
pincel.fill();
}
function limpaTela(){
pincel.clearRect(0, 0, 600, 400);
pincel.fillStyle = 'lightgray';
pincel.fillRect(0, 0, 600, 400);
}
var x = 20;
var y = 20;
var direcao_x = 0.36;
var direcao_y = 0.64;
var mouse_x = 300;
var mouse_y = 200;
var intensidadeMouse = 1.0;
function atualizaDirecao(){
direcao_x += intensidadeMouse * ((mouse_x-x)/((mouse_x-x)**2+(mouse_y-y)**2)**(3/2))
direcao_y += intensidadeMouse * ((mouse_y-y)/((mouse_x-x)**2+(mouse_y-y)**2)**(3/2))
}
function atualizaPosicao(){
x += direcao_x + (x>600?-600:0) + (x<0?600:0);
y += direcao_y + (y>400?-400:0) + (y<0?400:0);
}
function atualizaTela(){
atualizaDirecao();
atualizaPosicao();
limpaTela();
desenhaCirculo(x, y, 10);
}
function atualizaMousePosition(evento){
mouse_x = evento.pageX;
mouse_y = evento.pageY;
}
tela.onmousemove = atualizaMousePosition;
setInterval(atualizaTela, 5);
</script>