revamped chapter layouts for desktop view

* desktop chapters layout
* fallback to mobile view on small screens
This commit is contained in:
Sai Karthik 2022-06-24 06:34:01 +05:30 committed by Kavin
parent ed8481cc20
commit fb4a2129d4
No known key found for this signature in database
GPG key ID: 49451E4482CC5BCD
2 changed files with 66 additions and 12 deletions

View file

@ -1,6 +1,24 @@
<template>
<!-- <h2 v-t="'video.chapters'" class="mb-5" /> -->
<div class="flex overflow-x-auto">
<!-- desktop view -->
<div v-if="mobileLayout == false" class="flex-col <lg:hidden" style="overflow-y: scroll; max-height: 29.3em">
<h2 v-t="'video.chapters'" class="mb-2 bg-gray-500/50 p-2" />
<div
:key="chapter.start"
v-for="chapter in chapters"
@click="$emit('seek', chapter.start)"
class="chapter-vertical"
>
<div class="flex">
<img :src="chapter.image" :alt="chapter.title" />
<div class="flex flex-col m-2">
<span class="text-truncate text-sm" :title="chapter.title" v-text="chapter.title" />
<span class="text-sm font-bold text-blue-500" v-text="timeFormat(chapter.start)" />
</div>
</div>
</div>
</div>
<!-- mobile view -->
<div v-else class="flex overflow-x-auto">
<div :key="chapter.start" v-for="chapter in chapters" @click="$emit('seek', chapter.start)" class="chapter">
<img :src="chapter.image" :alt="chapter.title" class="" />
<div class="m-1 flex">
@ -24,6 +42,18 @@
height: 100%;
}
}
.chapter-vertical {
@apply cursor-pointer;
align-self: center;
padding: 10px;
img {
width: 30%;
height: 30%;
}
}
.chapter-vertical:hover {
@apply bg-gray-500;
}
.text-truncate {
white-space: nowrap;
width: 10em;
@ -38,6 +68,10 @@ import { defineProps, defineEmits } from "vue";
defineProps({
chapters: Object,
mobileLayout: {
type: Boolean,
default: () => true,
},
});
defineEmits(["seek"]);

View file

@ -16,16 +16,23 @@
<ErrorHandler v-if="video && video.error" :message="video.message" :error="video.error" />
<div v-show="!video.error">
<VideoPlayer
ref="videoPlayer"
:video="video"
:sponsors="sponsors"
:playlist="playlist"
:index="index"
:selected-auto-play="selectedAutoPlay"
:selected-auto-loop="selectedAutoLoop"
/>
<ChaptersBar v-if="video?.chapters?.length > 0" :chapters="video.chapters" @seek="navigate" />
<div :class="isMobile ? 'flex-col' : 'flex'">
<VideoPlayer
ref="videoPlayer"
:video="video"
:sponsors="sponsors"
:playlist="playlist"
:index="index"
:selected-auto-play="selectedAutoPlay"
:selected-auto-loop="selectedAutoLoop"
/>
<ChaptersBar
:mobileLayout="isMobile"
v-if="video?.chapters?.length > 0"
:chapters="video.chapters"
@seek="navigate"
/>
</div>
<div class="font-bold mt-2 text-2xl break-words" v-text="video.title" />
<div class="flex mb-1.5">
@ -203,6 +210,7 @@ export default {
smallViewQuery: smallViewQuery,
smallView: smallViewQuery.matches,
showModal: false,
isMobile: true,
};
},
computed: {
@ -226,6 +234,18 @@ export default {
},
},
mounted() {
// check screen size
if (window.innerWidth >= 1024) {
this.isMobile = false;
}
// add an event listener to watch for screen size changes
window.addEventListener("resize", () => {
if (window.innerWidth >= 1024) {
this.isMobile = false;
} else {
this.isMobile = true;
}
});
this.getVideoData().then(() => {
(async () => {
const videoId = this.getVideoId();