Added custom marker saving
This commit is contained in:
BIN
public/icon/push-pin-shadow.png
Normal file
BIN
public/icon/push-pin-shadow.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 851 B |
BIN
public/icon/push-pin.png
Normal file
BIN
public/icon/push-pin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
@@ -193,7 +193,6 @@ for (let i = 0; i < markers.length; i++) {
|
|||||||
* Add player's position marker
|
* Add player's position marker
|
||||||
*/
|
*/
|
||||||
if ( players && Object.keys(players).length > 0 ) {
|
if ( players && Object.keys(players).length > 0 ) {
|
||||||
console.log(players)
|
|
||||||
const playersPosition =[
|
const playersPosition =[
|
||||||
convertYToScale(players.markerCoords.y),
|
convertYToScale(players.markerCoords.y),
|
||||||
convertXToScale(players.markerCoords.x)
|
convertXToScale(players.markerCoords.x)
|
||||||
@@ -288,16 +287,76 @@ map.setMaxBounds(
|
|||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SVG LAYERS
|
* CUSTOM MARKERS
|
||||||
*/
|
*/
|
||||||
// const svgElement = document.getElementById('svg-overlay')
|
|
||||||
// const latLngBounds = L.latLngBounds([baseTileLayer.getBounds().getSouth() + 0.9875, baseTileLayer.getBounds().getWest()], [baseTileLayer.getBounds().getNorth(), baseTileLayer.getBounds().getEast() - 1.675]);
|
|
||||||
|
|
||||||
// const svgOverlay = L.svgOverlay(svgElement, latLngBounds, {
|
// List to be persisted in localStorage
|
||||||
// opacity: 0.25,
|
let customMarkersList = []
|
||||||
// interactive: true,
|
|
||||||
// zIndex: 10,
|
function saveCustomMarkers() {
|
||||||
// }).addTo(map);
|
localStorage.setItem('custom-markers', JSON.stringify(customMarkersList))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stores last map coords on context
|
||||||
|
map.addEventListener('contextmenu', storeLastHeldPositions)
|
||||||
|
map.addEventListener('click', storeLastHeldPositions)
|
||||||
|
|
||||||
|
function storeLastHeldPositions(e) {
|
||||||
|
localStorage.setItem('lastHeldXPosition', e.latlng.lng)
|
||||||
|
localStorage.setItem('lastHeldYPosition', e.latlng.lat)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that creates custom markers and places them on the map
|
||||||
|
*/
|
||||||
|
function addCustomMarker() {
|
||||||
|
const lon = Number(localStorage.getItem('lastHeldXPosition'))
|
||||||
|
const lat = Number(localStorage.getItem('lastHeldYPosition'))
|
||||||
|
|
||||||
|
const customMarkerIconOptions = {
|
||||||
|
iconUrl: `icon/push-pin.png`,
|
||||||
|
shadowUrl: `icon/push-pin-shadow.png`,
|
||||||
|
iconSize: [20, 20],
|
||||||
|
shadowSize: [30, 25],
|
||||||
|
iconAnchor: [0, 13],
|
||||||
|
shadowAnchor: [0, 15],
|
||||||
|
className: "fade-in"
|
||||||
|
}
|
||||||
|
const customMarkerIcon = L.icon(customMarkerIconOptions)
|
||||||
|
|
||||||
|
// Sticks the custom marker on the map
|
||||||
|
const customMarker = L.marker([lat, lon], { icon: customMarkerIcon }).addTo(map)
|
||||||
|
customMarkersList.push({
|
||||||
|
lat,
|
||||||
|
lon,
|
||||||
|
icon: customMarkerIconOptions
|
||||||
|
})
|
||||||
|
|
||||||
|
saveCustomMarkers()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Listeners for the custom add marker event
|
||||||
|
// See MarkerCreator.vue component for more details
|
||||||
|
document.addEventListener('add-custom-marker', addCustomMarker)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load all custom markers onto the map
|
||||||
|
*/
|
||||||
|
function loadCustomMarkersFromStorage() {
|
||||||
|
const customMarkersData = JSON.parse(localStorage.getItem('custom-markers'))
|
||||||
|
|
||||||
|
if (!customMarkersData) return
|
||||||
|
|
||||||
|
customMarkersList = customMarkersData
|
||||||
|
|
||||||
|
for (let i = 0; i < customMarkersData.length; i++) {
|
||||||
|
const m = customMarkersData[i];
|
||||||
|
console.log(m)
|
||||||
|
|
||||||
|
L.marker([m.lat, m.lon], { icon: L.icon(m.icon) }).addTo(map)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loadCustomMarkersFromStorage()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UTILITIES
|
* UTILITIES
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onClickOutside, onLongPress, useCssVar, useMouse, useTimeout, useTimeoutFn } from '@vueuse/core';
|
import { onClickOutside, onLongPress, useCssVar, useLocalStorage, useMouse, useTimeout, useTimeoutFn } from '@vueuse/core';
|
||||||
import { onMounted, onUnmounted, ref, watch } from 'vue';
|
import { onMounted, onUnmounted, ref, watch } from 'vue';
|
||||||
|
|
||||||
const markerMenu = ref<HTMLMenuElement>();
|
const markerMenu = ref<HTMLMenuElement>();
|
||||||
@@ -9,39 +9,34 @@ const markerMenu = ref<HTMLMenuElement>();
|
|||||||
*/
|
*/
|
||||||
const isActive = ref<Boolean>(false)
|
const isActive = ref<Boolean>(false)
|
||||||
|
|
||||||
const hasBeenLongPressed = ref<Boolean>(false)
|
// const hasBeenLongPressed = ref<Boolean>(false)
|
||||||
const longPressDelay = 500
|
// const longPressDelay = 500
|
||||||
const longPressOver = 1100
|
// const longPressOver = 1000
|
||||||
|
|
||||||
const longPressTimer = useTimeoutFn(() => {
|
// const longPressTimer = useTimeoutFn(() => {
|
||||||
hasBeenLongPressed.value = false
|
// hasBeenLongPressed.value = false
|
||||||
}, longPressOver)
|
// }, longPressOver)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
window.addEventListener('contextmenu', handleContextMenu)
|
window.addEventListener('contextmenu', handleContextMenu)
|
||||||
onLongPress(document.documentElement, handleLongPress, { delay: longPressDelay })
|
// onLongPress(document.documentElement, handleLongPress, { delay: longPressDelay })
|
||||||
onClickOutside(markerMenu, handleClickOutside)
|
onClickOutside(markerMenu, handleClickOutside)
|
||||||
})
|
})
|
||||||
|
|
||||||
function handleLongPress(e: Event) {
|
// function handleLongPress(e: Event) {
|
||||||
console.log(e)
|
// hasBeenLongPressed.value = true
|
||||||
|
// longPressTimer.start()
|
||||||
|
|
||||||
hasBeenLongPressed.value = true
|
// showMenu()
|
||||||
longPressTimer.start()
|
// }
|
||||||
|
|
||||||
showMenu()
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleClickOutside(e: Event) {
|
function handleClickOutside(e: Event) {
|
||||||
console.log(e)
|
// if (!hasBeenLongPressed.value) {
|
||||||
|
|
||||||
if (!hasBeenLongPressed.value) {
|
|
||||||
hideMenu()
|
hideMenu()
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleContextMenu(e: Event) {
|
function handleContextMenu(e: Event) {
|
||||||
console.log(e)
|
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
|
||||||
showMenu()
|
showMenu()
|
||||||
@@ -71,7 +66,6 @@ watch( isActive, (o, n) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
function updateMenuPosition() {
|
function updateMenuPosition() {
|
||||||
storeMousePosition()
|
|
||||||
updateCSSVars()
|
updateCSSVars()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,23 +75,28 @@ function updateCSSVars() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Storing data and logic
|
* Adding custom marker
|
||||||
*/
|
*/
|
||||||
const lastHeldXPosition = ref<number>(0)
|
const lastHeldXPosition = useLocalStorage('lastHeldXPosition', 0);
|
||||||
const lastHeldYPosition = ref<number>(0)
|
const lastHeldYPosition = useLocalStorage('lastHeldYPosition', 0);
|
||||||
|
|
||||||
function storeMousePosition() {
|
const addCustomMarker = ref<HTMLButtonElement>();
|
||||||
lastHeldXPosition.value = mouse.x.value
|
|
||||||
lastHeldYPosition.value = mouse.y.value
|
onMounted(() => {
|
||||||
}
|
const addCustomMarkerEvent = new CustomEvent(`add-custom-marker`, { bubbles: true })
|
||||||
|
|
||||||
|
addCustomMarker.value?.addEventListener('click', () => {
|
||||||
|
addCustomMarker.value?.dispatchEvent(addCustomMarkerEvent)
|
||||||
|
})
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Transition>
|
<Transition>
|
||||||
<menu v-show="isActive" ref="markerMenu">
|
<menu v-show="isActive" ref="markerMenu">
|
||||||
<li>
|
<li>
|
||||||
<button>
|
<button ref="addCustomMarker">
|
||||||
Add a marker {{ lastHeldXPosition }} {{ lastHeldYPosition }}
|
Ajouter un marqueur personnel
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</menu>
|
</menu>
|
||||||
|
|||||||
Reference in New Issue
Block a user