2022-04-08 21:29:50 +00:00
|
|
|
<template>
|
|
|
|
<div class="overflow-x-scroll h-screen-sm" ref="scrollable">
|
|
|
|
<VideoItem
|
|
|
|
v-for="(related, index) in playlist.relatedStreams"
|
|
|
|
:key="related.url"
|
2022-11-01 12:12:54 +00:00
|
|
|
:item="related"
|
2022-04-08 21:29:50 +00:00
|
|
|
:index="index"
|
|
|
|
:playlist-id="playlistId"
|
|
|
|
height="94"
|
|
|
|
width="168"
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import { nextTick } from "vue";
|
|
|
|
import VideoItem from "./VideoItem.vue";
|
|
|
|
export default {
|
|
|
|
components: { VideoItem },
|
|
|
|
props: {
|
|
|
|
playlist: {
|
|
|
|
type: Object,
|
|
|
|
required: true,
|
|
|
|
},
|
|
|
|
playlistId: {
|
|
|
|
type: String,
|
|
|
|
required: true,
|
|
|
|
},
|
|
|
|
selectedIndex: {
|
|
|
|
type: Number,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
mounted() {
|
|
|
|
this.updateScroll();
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
updateScroll() {
|
|
|
|
const elems = Array.from(this.$refs.scrollable.children).filter(elm => elm.matches("div"));
|
|
|
|
const index = this.selectedIndex - 1;
|
|
|
|
if (index < elems.length)
|
|
|
|
this.$refs.scrollable.scrollTop =
|
|
|
|
elems[this.selectedIndex - 1].offsetTop - this.$refs.scrollable.offsetTop;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
watch: {
|
|
|
|
playlist: {
|
|
|
|
handler() {
|
|
|
|
if (this.selectedIndex - 1 < this.playlist.relatedStreams.length)
|
|
|
|
nextTick(() => {
|
|
|
|
this.updateScroll();
|
|
|
|
});
|
|
|
|
},
|
|
|
|
deep: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
</script>
|