55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
|
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);
|
||
|
}
|
||
|
}
|