mirror of
https://github.com/KevinMidboe/nova-map-fields.git
synced 2026-01-09 19:05:37 +00:00
Update a marker position of polygon when dragged
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div @keydown.backspace="removeLastMarker">
|
<div @keydown.backspace="removeLastMarker">
|
||||||
<field-map :bounds="bounds" :center="center" :field="field" @click="createMarker">
|
<field-map :bounds="bounds" :center="center" :field="field" @click="createMarker">
|
||||||
<l-marker v-for="marker in markers" :lat-lng="marker" :draggable="edit" @dragend="triggerChange">
|
<l-marker v-for="marker in markers" :lat-lng="marker" :draggable="edit" @dragstart="saveDraggingMarker" @dragend="updateMarkerPosition">
|
||||||
<l-icon
|
<l-icon
|
||||||
:icon-size="[24, 24]"
|
:icon-size="[24, 24]"
|
||||||
:icon-anchor="[12, 12]"
|
:icon-anchor="[12, 12]"
|
||||||
@@ -44,6 +44,8 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
startBounds: undefined,
|
startBounds: undefined,
|
||||||
|
markerBeingDragged: undefined,
|
||||||
|
lastMarkerAddedTime: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -82,10 +84,11 @@ export default {
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
triggerChange(evt) {
|
triggerChange(evt) {
|
||||||
console.log("this is our event:", evt)
|
|
||||||
console.log("this is our markers:", this.markers)
|
|
||||||
this.$emit('input', this.markers);
|
this.$emit('input', this.markers);
|
||||||
},
|
},
|
||||||
|
saveDraggingMarker(evt) {
|
||||||
|
this.markerBeingDragged = evt.target._latlng;
|
||||||
|
},
|
||||||
removeLastMarker(event) {
|
removeLastMarker(event) {
|
||||||
this.markers.splice(-1,1);
|
this.markers.splice(-1,1);
|
||||||
this.triggerChange();
|
this.triggerChange();
|
||||||
@@ -97,9 +100,21 @@ export default {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
},
|
},
|
||||||
createMarker(evt) {
|
createMarker(evt) {
|
||||||
|
if (new Date().getTime() - this.lastMarkerAddedTime < 20) {
|
||||||
|
// Don't want to double register clicks from dragend, if within 20 ms return
|
||||||
|
return
|
||||||
|
}
|
||||||
this.markers.push(evt.latlng);
|
this.markers.push(evt.latlng);
|
||||||
this.triggerChange();
|
this.triggerChange();
|
||||||
},
|
},
|
||||||
|
updateMarkerPosition(evt) {
|
||||||
|
const newMarker = evt.target._latlng;
|
||||||
|
const { lat, lng } = this.markerBeingDragged;
|
||||||
|
|
||||||
|
const markerIndex = this.value.findIndex(marker => marker.lat === lat && marker.lng === lng);
|
||||||
|
this.value.splice(markerIndex, 1, newMarker);
|
||||||
|
this.lastMarkerAddedTime = new Date().getTime()
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
|
|||||||
Reference in New Issue
Block a user