From 2d48a8f15970d7af8092e9450057a05b4d3f9333 Mon Sep 17 00:00:00 2001
From: Zero~Informatique
Date: Fri, 31 Jan 2020 13:22:52 +0100
Subject: viewer: when loading a picture, displays a preview based on the
thumbnail on slow connections This works on Chrome, but FireFox presents some
issues: - the picture background is sometimes white instead of transparent,
hidding the background - image-orientation doesn't work for background
pictures or for negative values
---
viewer/src/components/LdPicture.vue | 49 +++++++++++++++++++++++++++++++++++--
1 file changed, 47 insertions(+), 2 deletions(-)
(limited to 'viewer/src/components')
diff --git a/viewer/src/components/LdPicture.vue b/viewer/src/components/LdPicture.vue
index b6a719f..5425a00 100644
--- a/viewer/src/components/LdPicture.vue
+++ b/viewer/src/components/LdPicture.vue
@@ -25,7 +25,13 @@
@click="onClick"
@dragscrollstart="dragging=true"
>
-
+
+
@@ -36,12 +42,35 @@ import { Component, Vue, Prop } from "vue-property-decorator";
export default class LdPicture extends Vue {
@Prop({ required: true }) readonly picture!: Gallery.Picture;
+ readonly SLOW_LOADING_TIMEOUT_MS: number = 1500;
+
dragging: boolean = false;
+ slowLoadingStyle: string | null = null;
+ timer: NodeJS.Timeout | null = null;
+
+ mounted() {
+ if (this.picture.thumbnail) this.timer = setTimeout(this.generateSlowLoadingStyle, this.SLOW_LOADING_TIMEOUT_MS);
+ }
+
+ destroyed() {
+ this.clearTimer();
+ }
+
+ clearTimer() {
+ if (this.timer) clearTimeout(this.timer);
+ this.timer = null;
+ this.slowLoadingStyle = null;
+ }
- get pictureSrc() {
+ pictureSrc() {
return `${process.env.VUE_APP_DATA_URL}${this.picture.properties.resource}`;
}
+ generateSlowLoadingStyle() {
+ this.clearTimer();
+ this.slowLoadingStyle = `background-image: url('${process.env.VUE_APP_DATA_URL}${this.picture.thumbnail}');`;
+ }
+
onClick() {
if (!this.dragging) this.$uiStore.toggleFullscreen();
this.dragging = false;
@@ -50,6 +79,22 @@ export default class LdPicture extends Vue {