Ya he logrado ver el efecto es bastante interesante, aunque yo no sé cómo se hace. Quizás alguien más experto puede ayudarte
.
Para la otra pregunta, mi idea es tener una función que haga el efecto, luego, dentro de esa función pones setTimeOut para llamarse a sí mismo y continuar el efecto, ese setTimeOut lo pones dentro de un if con una variable, ¿para qué?. Para que cuando tengamos el onmouseover cambiemos el valor de esa variable y detengamos el efecto. Luego, en el onmouseout volvemos a llamar a setTimeOut y continuamos el efecto.
Espero no haber sido confuso.
Saludos