use setTimeout as requestAnimFrame is inconsistent