<canvas width="600" height="400"></canvas>
<script>
var pantalla = document.querySelector("canvas");
var pincel = pantalla.getContext("2d");
pincel.fillStyle = "grey";
pincel.fillRect(0,0,600,400);
function diseniarCircunferencia(x,y,radio){
pincel.fillStyle = "blue";
pincel.beginPath();
pincel.arc(x,y,radio,0, 2*Math.PI);
pincel.fill();
}
function limpiarPantalla() {
pincel.clearRect(0,0,600,400);
}
var x = 0;
var llego = true;
function actualizarPantalla() {
limpiarPantalla();
diseniarCircunferencia(x,20,10);
if(llego == true && x!=600){
x++;
}else{
llego = false;
}
if(llego==false && x!=0){
x--;
}else{
llego=true;
}
}
setInterval(actualizarPantalla, 5);
Yo utilice una bandera que cambia su valor a falso cuando se llega al límite de la pantalla canvas, posteriormente, con un if de nuevo, verifico si la bandera es falsa y si se llegó al límite de la pantalla, pero del lado contrario, si ambas se cumplen, el sentido en el cual se hace el conteo de x ahora disminuye hasta cero, como se ve en la condicional, llega a cero y su valor cambia de nuevo a verdadero para cambiar el sentido de x, ahora aumentando de nuevo y así sucesivamente.