fix: 지도 도시 민감도 문제 수정

- touchend는 touchmove와는 별개이므로 함께 처리
This commit is contained in:
2023-03-17 00:30:22 +09:00
parent 83c43d0261
commit 3513aae088
3 changed files with 52 additions and 11 deletions
+18 -1
View File
@@ -15,6 +15,8 @@
cursor: city.clickable ? 'pointer' : 'default', cursor: city.clickable ? 'pointer' : 'default',
}" }"
@click="clicked" @click="clicked"
@touchstart="touchstart"
@touchmove="touchmove"
@touchend="touchend" @touchend="touchend"
@mouseenter="mouseenter" @mouseenter="mouseenter"
@mouseleave="mouseleave" @mouseleave="mouseleave"
@@ -43,6 +45,7 @@ const emit = defineEmits<{
(event: "click", evnet: MouseEvent | TouchEvent): void; (event: "click", evnet: MouseEvent | TouchEvent): void;
(event: "mouseenter", e: MouseEvent): void; (event: "mouseenter", e: MouseEvent): void;
(event: "mouseleave", e: MouseEvent): void; (event: "mouseleave", e: MouseEvent): void;
(event: "touchleave", e: TouchEvent): void;
}>(); }>();
const props = defineProps({ const props = defineProps({
city: { city: {
@@ -117,11 +120,25 @@ function mouseleave(event: MouseEvent) {
emit("mouseleave", event); emit("mouseleave", event);
} }
let touchOnTrack = false;
function touchstart() {
touchOnTrack = true;
}
function touchmove() {
touchOnTrack = false;
}
function touchend(event: TouchEvent) { function touchend(event: TouchEvent) {
if (touchOnTrack) {
event.stopPropagation(); event.stopPropagation();
emit("click", event); emit("click", event);
} }
else{
emit("touchleave", event);
}
}
function silent(event: MouseEvent) { function silent(event: MouseEvent) {
event.stopPropagation(); event.stopPropagation();
} }
+19 -1
View File
@@ -23,6 +23,8 @@
cursor: city.clickable ? 'pointer' : 'default', cursor: city.clickable ? 'pointer' : 'default',
}" }"
@click="clicked" @click="clicked"
@touchstart="touchstart"
@touchmove="touchmove"
@touchend="touchend" @touchend="touchend"
@mouseenter="mouseenter" @mouseenter="mouseenter"
@mouseleave="mouseleave" @mouseleave="mouseleave"
@@ -54,6 +56,7 @@ const emit = defineEmits<{
(event: "click", e: MouseEvent | TouchEvent): void; (event: "click", e: MouseEvent | TouchEvent): void;
(event: "mouseenter", e: MouseEvent): void; (event: "mouseenter", e: MouseEvent): void;
(event: "mouseleave", e: MouseEvent): void; (event: "mouseleave", e: MouseEvent): void;
(event: "touchleave", e: TouchEvent): void;
}>(); }>();
const props = defineProps({ const props = defineProps({
city: { city: {
@@ -119,10 +122,25 @@ function mouseleave(event: MouseEvent) {
emit("mouseleave", event); emit("mouseleave", event);
} }
let touchOnTrack = false;
function touchstart() {
touchOnTrack = true;
}
function touchmove() {
touchOnTrack = false;
}
function touchend(event: TouchEvent) { function touchend(event: TouchEvent) {
if (touchOnTrack) {
event.stopPropagation(); event.stopPropagation();
emit("click", event); emit("click", event);
} }
else{
emit("touchleave", event);
}
}
function silent(event: MouseEvent) { function silent(event: MouseEvent) {
event.stopPropagation(); event.stopPropagation();
@@ -148,7 +166,7 @@ function silent(event: MouseEvent) {
} }
span { span {
line-height: 1.0; line-height: 1;
font-size: 11px; font-size: 11px;
} }
} }
+10 -4
View File
@@ -65,8 +65,9 @@
:isFullWidth="isFullWidth" :isFullWidth="isFullWidth"
:href="props.genHref?.call(city, city.id)" :href="props.genHref?.call(city, city.id)"
@click="cityClick(city, $event)" @click="cityClick(city, $event)"
@touchleave="pointerleave(city, $event)"
@mouseenter="mouseenter(city, $event)" @mouseenter="mouseenter(city, $event)"
@mouseleave="mouseleave(city, $event)" @mouseleave="pointerleave(city, $event)"
/> />
</template> </template>
<template v-else <template v-else
@@ -78,8 +79,9 @@
:isFullWidth="isFullWidth" :isFullWidth="isFullWidth"
:href="props.genHref?.call(city, city.id)" :href="props.genHref?.call(city, city.id)"
@click="cityClick(city, $event)" @click="cityClick(city, $event)"
@touchleave="pointerleave(city, $event)"
@mouseenter="mouseenter(city, $event)" @mouseenter="mouseenter(city, $event)"
@mouseleave="mouseleave(city, $event)" @mouseleave="pointerleave(city, $event)"
/></template> /></template>
</div> </div>
<div <div
@@ -484,8 +486,12 @@ function mouseenter(city: MapCityParsed, $event: MouseEvent): void {
} }
} }
function mouseleave(city: MapCityParsed, $event: MouseEvent): void { function pointerleave(city: MapCityParsed, $event: MouseEvent|TouchEvent): void {
if (cursorType.value == "mouse") { if (cursorType.value == "touch") {
activatedCity.value = undefined;
touchState.value = 0;
}
else if (cursorType.value == "mouse") {
activatedCity.value = undefined; activatedCity.value = undefined;
touchState.value = 0; touchState.value = 0;
} }