summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkGalleryPostPreview.vue
diff options
context:
space:
mode:
authorAcid Chicken (硫酸鶏) <root@acid-chicken.com>2023-04-29 22:57:46 +0900
committerGitHub <noreply@github.com>2023-04-29 22:57:46 +0900
commit9d5911d4e436859127f38d5fcdaa6cb5ce6d01e6 (patch)
tree4feca3f9e8ed46acc0ee3abd7ad357c8d1f05d8e /packages/frontend/src/components/MkGalleryPostPreview.vue
parentfix(backend): `alsoKnownAs`の誤った定義を修正 (#10725) (diff)
downloadsharkey-9d5911d4e436859127f38d5fcdaa6cb5ce6d01e6.tar.gz
sharkey-9d5911d4e436859127f38d5fcdaa6cb5ce6d01e6.tar.bz2
sharkey-9d5911d4e436859127f38d5fcdaa6cb5ce6d01e6.zip
feat: make `MkImgWithBlurhash` transitionable (#10500)
* feat: make `MkImgWithBlurhash` animatable * refactor: split out transition styles * fix: bug * test: waitFor image loads * style: remove unused await * fix * fix type error --------- Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Diffstat (limited to 'packages/frontend/src/components/MkGalleryPostPreview.vue')
-rw-r--r--packages/frontend/src/components/MkGalleryPostPreview.vue52
1 files changed, 38 insertions, 14 deletions
diff --git a/packages/frontend/src/components/MkGalleryPostPreview.vue b/packages/frontend/src/components/MkGalleryPostPreview.vue
index 944f5ad97b..4f8f7b945a 100644
--- a/packages/frontend/src/components/MkGalleryPostPreview.vue
+++ b/packages/frontend/src/components/MkGalleryPostPreview.vue
@@ -1,9 +1,21 @@
<template>
<MkA :to="`/gallery/${post.id}`" class="ttasepnz _panel" tabindex="-1" @pointerenter="enterHover" @pointerleave="leaveHover">
<div class="thumbnail">
- <ImgWithBlurhash class="img" :hash="post.files[0].blurhash"/>
<Transition>
- <ImgWithBlurhash v-if="show" class="img layered" :src="post.files[0].thumbnailUrl" :hash="post.files[0].blurhash"/>
+ <ImgWithBlurhash
+ class="img layered"
+ :transition="safe ? null : {
+ enterActiveClass: $style.transition_toggle_enterActive,
+ leaveActiveClass: $style.transition_toggle_leaveActive,
+ enterFromClass: $style.transition_toggle_enterFrom,
+ leaveToClass: $style.transition_toggle_leaveTo,
+ enterToClass: $style.transition_toggle_enterTo,
+ leaveFromClass: $style.transition_toggle_leaveFrom,
+ }"
+ :src="post.files[0].thumbnailUrl"
+ :hash="post.files[0].blurhash"
+ :force-blurhash="!show"
+ />
</Transition>
</div>
<article>
@@ -28,7 +40,8 @@ const props = defineProps<{
}>();
const hover = ref(false);
-const show = computed(() => defaultStore.state.nsfw === 'ignore' || defaultStore.state.nsfw === 'respect' && !props.post.isSensitive || hover.value);
+const safe = computed(() => defaultStore.state.nsfw === 'ignore' || defaultStore.state.nsfw === 'respect' && !props.post.isSensitive);
+const show = computed(() => safe.value || hover.value);
function enterHover(): void {
hover.value = true;
@@ -39,6 +52,27 @@ function leaveHover(): void {
}
</script>
+<style lang="scss" module>
+.transition_toggle_enterActive,
+.transition_toggle_leaveActive {
+ transition: opacity 0.5s;
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.transition_toggle_enterFrom,
+.transition_toggle_leaveTo {
+ opacity: 0;
+}
+
+.transition_toggle_enterTo,
+.transition_toggle_leaveFrom {
+ transition: none;
+ opacity: 1;
+}
+</style>
+
<style lang="scss" scoped>
.ttasepnz {
display: block;
@@ -66,7 +100,7 @@ function leaveHover(): void {
width: 100%;
height: 100%;
position: absolute;
- transition: all 0.5s ease;
+ transition: transform 0.5s ease;
> .img {
width: 100%;
@@ -76,16 +110,6 @@ function leaveHover(): void {
&.layered {
position: absolute;
top: 0;
-
- &.v-enter-active,
- &.v-leave-active {
- transition: opacity 0.5s ease;
- }
-
- &.v-enter-from,
- &.v-leave-to {
- opacity: 0;
- }
}
}
}