Skip to content

Commit

Permalink
feat(locationBtn): UX improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
azarz committed Nov 19, 2024
1 parent 996513b commit a9c6ad6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 28 deletions.
6 changes: 1 addition & 5 deletions src/js/map-listeners.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,7 @@ const addListeners = () => {

// Désactivation du tracking au déplacement non programmatique de la carte
map.on("dragstart", () => {
if (Location.isNavigationActive()){
Location.disableNavigation(0);
} else if (Location.isTrackingActive()){
Location.disableTracking();
}
Location.disableTracking();
});

// l'event contextmenu n'est pas enclenché par clic long sur la carte... https://github.com/maplibre/maplibre-gl-js/issues/373
Expand Down
43 changes: 20 additions & 23 deletions src/js/services/location.js
Original file line number Diff line number Diff line change
Expand Up @@ -230,17 +230,21 @@ const moveTo = (coords, zoom = Globals.map.getZoom(), panTo = true, gps = true)
if (tracking_active) {
let bearing = Globals.map.getBearing();
let pitch = 0;
let padding = 0;
if (navigation_active) {
bearing = -mapBearing;
pitch = 45;
padding = {top: DOM.$map.clientHeight * 0.5};
}
isMapPanning = true;
Globals.map.flyTo({
Globals.map.easeTo({
center: [coords.lon, coords.lat],
zoom: zoom,
bearing: bearing,
pitch: pitch,
duration: 500});
duration: 500,
padding: padding,
});
Globals.map.once("moveend", () => {isMapPanning = false;});
} else {
Globals.map.flyTo({
Expand Down Expand Up @@ -289,11 +293,9 @@ const watchPositionCallback = (position) => {
var padding;
// gestion du mode paysage / écran large
if (window.matchMedia("screen and (min-aspect-ratio: 1/1) and (min-width:400px)").matches) {
var paddingLeft = parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--safe-area-inset-left").slice(0, -2)) +
Math.min(window.innerHeight, window.innerWidth/2) + 42;
padding = {top: 20, right: 20, bottom: 20, left: paddingLeft};
padding = {top: 20, right: 20, bottom: 20, left: 20};
} else {
padding = {top: 80, right: 20, bottom: 120, left: 20};
padding = {top: 80, right: 20, bottom: 40, left: 20};
}
Globals.map.fitBounds(bbox, {
padding: padding
Expand Down Expand Up @@ -412,6 +414,7 @@ const locationOnOff = async () => {
}
DOM.$geolocateBtn.style.backgroundImage = "url(\"" + LocationFixeImg + "\")";
tracking_active = true;
Globals.map.setPadding({top: 0, right: 0, bottom: 0, left: 0});
Globals.map.setCenter([currentPosition.coords.longitude, currentPosition.coords.latitude]);
Globals.map.touchZoomRotate.disable();
Globals.map.getCanvasContainer().addEventListener("touchstart", locationOnTouchStartHandler);
Expand All @@ -428,10 +431,12 @@ const locationOnOff = async () => {
DOM.$geolocateBtn.style.backgroundImage = "url(\"" + LocationFollowImg + "\")";
navigation_active = true;
Globals.map.setMaxPitch(45);
Globals.map.flyTo({
const padding = {top: DOM.$map.clientHeight * 0.5};
Globals.map.easeTo({
center: [currentPosition.coords.longitude, currentPosition.coords.latitude],
bearing: -mapBearing,
pitch: 45,
padding: padding,
});
DOM.$compassBtn.classList.remove("d-none");
DOM.$compassBtn.style.transform = "rotate(" + mapBearing + "deg)";
Expand Down Expand Up @@ -544,35 +549,27 @@ const getLocation = async () => {
const disableTracking = () => {
DOM.$geolocateBtn.style.backgroundImage = "url(\"" + LocationImg + "\")";
tracking_active = false;
navigation_active = false;
if (navigation_active) {
Globals.map.setMaxPitch(0);
navigation_active = false;
}
Globals.map.touchZoomRotate.enable();
Globals.map.getCanvasContainer().removeEventListener("touchstart", locationOnTouchStartHandler);
Globals.map.getCanvasContainer().removeEventListener("touchmove", locationOnTouchMoveHandler);
Toast.show({
text: "Suivi de position activé",
duration: "short",
position: "bottom"
});
};

const disableNavigation = (bearing = Globals.map.getBearing()) => {
DOM.$geolocateBtn.style.backgroundImage = "url(\"" + LocationImg + "\")";
DOM.$geolocateBtn.style.backgroundImage = "url(\"" + LocationFixeImg + "\")";
navigation_active = false;
tracking_active = false;
Globals.map.flyTo({
pitch: 0,
bearing: bearing,
duration: 500,
});
Globals.map.touchZoomRotate.enable();
Globals.map.getCanvasContainer().removeEventListener("touchstart", locationOnTouchStartHandler);
Globals.map.getCanvasContainer().removeEventListener("touchmove", locationOnTouchMoveHandler);
setTimeout( () => {Globals.map.setMaxPitch(0);}, 500);
Toast.show({
text: "Suivi de position activé",
duration: "short",
position: "bottom"
});
if (bearing === 0) {
DOM.$compassBtn.classList.add("d-none");
}
};

let listenResumeAfterLocation = false;
Expand Down

0 comments on commit a9c6ad6

Please sign in to comment.