forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			88 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| <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 ToSvelte from "./ToSvelte.svelte";
 | |
|   import Svg from "../../Svg";
 | |
|   import { Store } from "../../Logic/UIEventSource";
 | |
|   import { onDestroy } from "svelte";
 | |
| 
 | |
|   let mainElem: HTMLElement;
 | |
|   export let hideSignal: Store<any>;
 | |
|   function hide(){
 | |
|       mainElem.style.visibility = "hidden";
 | |
|   }
 | |
|   if (hideSignal) {
 | |
|     onDestroy(hideSignal.addCallbackD(() => {
 | |
|       console.log("Received hide signal")
 | |
|       hide()
 | |
|       return true;
 | |
|     }));
 | |
|   }
 | |
|   
 | |
| $: {
 | |
|   mainElem?.addEventListener("click",_ => hide())
 | |
|   mainElem?.addEventListener("touchstart",_ => hide())
 | |
| }
 | |
| </script>
 | |
| 
 | |
| 
 | |
| <div bind:this={mainElem} class="absolute bottom-0 right-0 w-full h-full">
 | |
|   <div id="hand-container" class="pointer-events-none">
 | |
|     <img src="./assets/svg/hand.svg"/>
 | |
|   </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);
 | |
|         }
 | |
| 
 | |
|         6% {
 | |
|             opacity: 1;
 | |
|             transform: rotate(-30deg);
 | |
|         }
 | |
| 
 | |
|         12% {
 | |
|             opacity: 1;
 | |
|             transform: rotate(-45deg);
 | |
|         }
 | |
| 
 | |
|         24% {
 | |
|             opacity: 1;
 | |
|             transform: rotate(-00deg);
 | |
|         }
 | |
| 
 | |
|         30% {
 | |
|             opacity: 1;
 | |
|             transform: rotate(-30deg);
 | |
|         }
 | |
| 
 | |
|         36% {
 | |
|             opacity: 0;
 | |
|             transform: rotate(-30deg);
 | |
|         }
 | |
| 
 | |
|         100% {
 | |
|             opacity: 0;
 | |
|             transform: rotate(-30deg);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     #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%;
 | |
|   }
 | |
|   
 | |
| </style>
 |