Updating scroll component on image load.
This commit is contained in:
parent
af9c4a36c6
commit
9b1d38d9ff
|
@ -64,32 +64,38 @@
|
||||||
<img
|
<img
|
||||||
:src="`/media/${cover.thumbnail}`"
|
:src="`/media/${cover.thumbnail}`"
|
||||||
class="item cover"
|
class="item cover"
|
||||||
|
@load="$parent.$emit('load')"
|
||||||
>
|
>
|
||||||
</a>
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<a
|
<div
|
||||||
v-for="photo in photos"
|
v-for="photo in photos"
|
||||||
:key="`media-${photo.index}`"
|
:key="`media-${photo.index}`"
|
||||||
:href="`/media/${photo.path}`"
|
class="item-container"
|
||||||
:class="{ sfw }"
|
|
||||||
class="item-link"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
>
|
||||||
<img
|
<a
|
||||||
:src="sfw ? `/img/${photo.sfw.thumbnail}` : `/media/${photo.thumbnail}`"
|
:href="`/media/${photo.path}`"
|
||||||
:alt="`Photo ${photo.index + 1}`"
|
:class="{ sfw }"
|
||||||
class="item"
|
class="item-link"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
|
<img
|
||||||
|
:src="sfw ? `/img/${photo.sfw.thumbnail}` : `/media/${photo.thumbnail}`"
|
||||||
|
:alt="`Photo ${photo.index + 1}`"
|
||||||
|
class="item"
|
||||||
|
@load="$parent.$emit('load')"
|
||||||
|
>
|
||||||
|
|
||||||
<span
|
<span
|
||||||
v-if="sfw"
|
v-if="sfw"
|
||||||
class="warning"
|
class="warning"
|
||||||
>
|
>
|
||||||
<Icon icon="warning2" />NSFW
|
<Icon icon="warning2" />NSFW
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -141,7 +147,6 @@ export default {
|
||||||
@import 'theme';
|
@import 'theme';
|
||||||
|
|
||||||
.media {
|
.media {
|
||||||
background: var(--background-dim);
|
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
|
@ -154,20 +159,11 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.expanded {
|
&.expanded {
|
||||||
display: flex;
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(32rem, 1fr));
|
||||||
|
grid-gap: 1rem;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-wrap: wrap;
|
margin: 0 0 1rem 0;
|
||||||
|
|
||||||
.item-link,
|
|
||||||
.trailer {
|
|
||||||
margin: 0 0 .5rem 0;
|
|
||||||
height: 18rem;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.item {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,12 +194,14 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-link,
|
.item-container,
|
||||||
.trailer-container {
|
.trailer-container {
|
||||||
|
max-width: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
.warning {
|
.warning {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -238,9 +236,8 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
height: 18rem;
|
max-height: 18rem;
|
||||||
vertical-align: middle;
|
max-width: 100%;
|
||||||
object-fit: cover;
|
|
||||||
box-shadow: 0 0 3px var(--shadow-weak);
|
box-shadow: 0 0 3px var(--shadow-weak);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ export default {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
padding: .15rem .25rem .15rem .3rem;
|
padding: .15rem .25rem .15rem .35rem;
|
||||||
border-radius: 0 0 0 .5rem;
|
border-radius: 0 0 0 .5rem;
|
||||||
color: var(--text-light);
|
color: var(--text-light);
|
||||||
background: var(--primary);
|
background: var(--primary);
|
||||||
|
|
|
@ -70,18 +70,17 @@ function scroll(direction) {
|
||||||
function mounted() {
|
function mounted() {
|
||||||
this.target = this.$slots.default[0].elm;
|
this.target = this.$slots.default[0].elm;
|
||||||
|
|
||||||
this.target.addEventListener('scroll', () => {
|
this.target.addEventListener('scroll', () => this.updateScroll());
|
||||||
this.updateScroll();
|
|
||||||
});
|
|
||||||
|
|
||||||
window.addEventListener('resize', this.updateScroll);
|
window.addEventListener('resize', this.updateScroll);
|
||||||
|
|
||||||
|
// typically triggered by slotted component when an image loads, affecting scrollWidth
|
||||||
|
this.$on('load', () => this.updateScroll());
|
||||||
this.updateScroll();
|
this.updateScroll();
|
||||||
setTimeout(() => this.updateScroll(), 150); // allow CSS to calculate
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function beforeDestroy() {
|
function beforeDestroy() {
|
||||||
this.target.removeEventListener('scroll', this.updateScroll);
|
this.target.removeEventListener('scroll', this.updateScroll);
|
||||||
|
|
||||||
window.removeEventListener('resize', this.updateScroll);
|
window.removeEventListener('resize', this.updateScroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue