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/assets/scss/global.scss | 14 ++++++-----
viewer/src/components/LdPicture.vue | 49 +++++++++++++++++++++++++++++++++++--
2 files changed, 55 insertions(+), 8 deletions(-)
(limited to 'viewer')
diff --git a/viewer/src/assets/scss/global.scss b/viewer/src/assets/scss/global.scss
index b418911..5de5946 100644
--- a/viewer/src/assets/scss/global.scss
+++ b/viewer/src/assets/scss/global.scss
@@ -96,10 +96,12 @@ img {
// === Effect to apply on lazy-image loading
-.v-lazy-image {
- opacity: 0;
- transition: opacity 0.4s;
-}
-.v-lazy-image-loaded {
- opacity: 1;
+img {
+ &.v-lazy-image {
+ opacity: 0;
+ transition: opacity 0.4s;
+ }
+ &.v-lazy-image-loaded {
+ opacity: 1;
+ }
}
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 {