const SONAR_DURATION = 5; function computeLatDistanceInKm (dest, orig) { // Approximation française return ((dest - orig) * 111); } function computeLonDistanceInKm (dest, orig) { // Approximation française return ((dest - orig) * 79); } function computeDelay (latDistanceKm, lonDistanceKm, sonarDuration) { placeDirection = Math.atan(latDistanceKm / lonDistanceKm); placeWay = lonDistanceKm < 0 ? -1 : 1; placeAngle = placeDirection * placeWay; unsignedAngle = placeAngle + (2 * Math.PI); animOrigAngle = 3 * Math.PI / 2; animAngle_verbose = animOrigAngle + unsignedAngle; animAngle_bounded = fmod(animAngle_verbose, (2 * Math.PI)); circleRatio = animAngle_bounded / (2 * Math.PI); delay = circleRatio * sonarDuration; return delay; } var places = document.getElementsByClassName('place'); var map = document.getElementById('map'); var origLat = map.getAttribute('data-orig-lat'); var origLon = map.getAttribute('data-orig-lon'); for (place of places) { if ( !( (placeLat == origLat) && (placeLon == origLon) ) ) { var placeLat = place.getAttribute("data-place-lat"); var placeLon = place.getAttribute("data-place-lon"); var latDistanceKm = computeLatDistanceInKm(placeLat, origLat); var lonDistanceKm = computeLonDistanceInKm(placeLon, origLon); var delay = computeDelay(latDistanceKm, lonDistanceKm, SONAR_DURATION); place.style.animationDelay = delay + 's'; console.log('delay JS : ' + delay); } }