mapcomplete/UI/Base/DragInvitation.svelte

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

90 lines
1.9 KiB
Svelte
Raw Normal View History

2023-03-29 17:21:20 +02:00
<script lang="ts">
/**
* This overlay element will regularly show a hand that swipes over the underlying element.
* This element will hide as soon as the Store 'hideSignal' receives a change (which is not undefined)
*/
import { Store } from "../../Logic/UIEventSource"
import { onDestroy } from "svelte"
2023-03-29 17:21:20 +02:00
let mainElem: HTMLElement
export let hideSignal: Store<any>
function hide() {
mainElem.style.visibility = "hidden"
2023-03-29 17:21:20 +02:00
}
let initTime = Date.now()
2023-03-29 17:21:20 +02:00
if (hideSignal) {
onDestroy(
hideSignal.addCallbackD(() => {
2023-06-15 16:12:46 +02:00
if (initTime + 1000 > Date.now()) {
console.log("Ignoring hide signal")
return
}
console.log("Received hide signal")
hide()
return true
})
)
2023-03-29 17:21:20 +02:00
}
$: {
mainElem?.addEventListener("click", (_) => hide())
mainElem?.addEventListener("touchstart", (_) => hide())
}
</script>
2023-03-29 17:21:20 +02:00
2023-06-15 16:12:46 +02:00
<div bind:this={mainElem} class="pointer-events-none absolute bottom-0 right-0 h-full w-full">
<div id="hand-container">
<img src="./assets/svg/hand.svg" />
2023-03-29 17:21:20 +02:00
</div>
</div>
<style>
@keyframes hand-drag-animation {
/* This is the animation on the little extra hand on the location input. If fades in, invites the user to interact/drag the map */
0% {
opacity: 0;
transform: rotate(-30deg);
}
2023-03-29 17:21:20 +02:00
6% {
opacity: 1;
transform: rotate(-30deg);
}
2023-03-29 17:21:20 +02:00
12% {
opacity: 1;
transform: rotate(-45deg);
}
2023-03-29 17:21:20 +02:00
24% {
opacity: 1;
transform: rotate(-00deg);
}
2023-03-29 17:21:20 +02:00
30% {
opacity: 1;
transform: rotate(-30deg);
}
2023-03-29 17:21:20 +02:00
36% {
opacity: 0;
transform: rotate(-30deg);
2023-03-29 17:21:20 +02:00
}
100% {
opacity: 0;
transform: rotate(-30deg);
}
}
2023-03-29 17:21:20 +02:00
#hand-container {
position: absolute;
width: 2rem;
left: calc(50% + 4rem);
top: calc(50%);
opacity: 0.7;
animation: hand-drag-animation 4s ease-in-out infinite;
transform-origin: 50% 125%;
2023-03-29 17:21:20 +02:00
}
</style>