// default zoom, center and rotation let zoom = 2; let center = [0, 0]; let rotation = 0;
if (window.location.hash !== '') { // try to restore center, zoom-level and rotation from the URL const hash = window.location.hash.replace('#map=', ''); const parts = hash.split('/'); if (parts.length === 4) { zoom = parseFloat(parts[0]); center = [parseFloat(parts[1]), parseFloat(parts[2])]; rotation = parseFloat(parts[3]); } }
let shouldUpdate = true; const view = map.getView(); const updatePermalink = function () { if (!shouldUpdate) { // do not update the URL when the view was changed in the 'popstate' handler shouldUpdate = true; return; }
// restore the view state when navigating through the history, see // https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate window.addEventListener('popstate', function (event) { if (event.state === null) { return; } map.getView().setCenter(event.state.center); map.getView().setZoom(event.state.zoom); map.getView().setRotation(event.state.rotation); shouldUpdate = false; });