From 4bc895667f49c3f33a27f5ec5451eaf4ff003e98 Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Thu, 24 Mar 2022 15:50:24 +1100 Subject: Add info-modal fade-out --- src/components/TileInfoModal.vue | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/components/TileInfoModal.vue b/src/components/TileInfoModal.vue index 6e0e99c..87bbd16 100644 --- a/src/components/TileInfoModal.vue +++ b/src/components/TileInfoModal.vue @@ -4,23 +4,35 @@ import {TolNode} from '../lib'; export default defineComponent({ props: { - tolNode: {type: Object as PropType}, + tolNode: {type: Object as PropType}, // The node to display, or null to hide }, - computed: { - hidden(){ - return this.tolNode == null; + data(){ + return { + lastNode: null as TolNode | null, // Used to prevent content-change during fade-out + }; + }, + watch: { + tolNode(newNode){ + if (newNode != null){ + this.lastNode = newNode; + } }, - styles(): Record { + }, + computed: { + transitionStyles(): Record { return { - display: this.hidden ? 'none' : 'block', - opacity: this.hidden ? '0' : '1', - transition: 'opacity 0.3s', + visibility: this.tolNode != null ? 'visible' : 'hidden', + opacity: this.tolNode != null ? '1' : '0', + transition: 'visibility, opacity', + transitionDuration: '300ms', }; }, }, methods: { - closeIconClicked(){ - this.$emit('info-modal-close'); + closeIconClicked(evt: Event){ + if (evt.target == this.$el || evt.target == this.$refs.closeIcon){ + this.$emit('info-modal-close'); + } }, }, emits: ['info-modal-close'] @@ -28,12 +40,12 @@ export default defineComponent({