You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
5.4 KiB
236 lines
5.4 KiB
<script setup lang="ts">
|
|
const props = defineProps({
|
|
title: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
subtext: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
image: {
|
|
type: String,
|
|
required: true,
|
|
},
|
|
summary: {
|
|
type: String,
|
|
// required: true,
|
|
},
|
|
infoSubtext: {
|
|
type: String,
|
|
},
|
|
date: {
|
|
type: String,
|
|
// required: true,
|
|
},
|
|
runtime: {
|
|
type: String,
|
|
// required: true,
|
|
},
|
|
imdbRating: {
|
|
type: String,
|
|
// required: true,
|
|
},
|
|
MPAA: {
|
|
type: String,
|
|
},
|
|
tag: {
|
|
type: String,
|
|
},
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<div class="scroller-item">
|
|
<div class="scroller-item-img">
|
|
<!-- <div class="scroller-item-poster-wrapper"> -->
|
|
<div class="poster-tag" v-if="props.tag !== '' && props.tag !== undefined">
|
|
{{ props.tag }}
|
|
</div>
|
|
<font-awesome-icon icon="fa-solid fa-play" class="play-icon" />
|
|
<img
|
|
:src="'/src/assets/images/' + props.image"
|
|
alt=""
|
|
:style="{
|
|
width: `${120}px`,
|
|
height: `${120 * (3 / 2)}px`,
|
|
}"
|
|
/>
|
|
<!-- </div> -->
|
|
<div class="info-box">
|
|
<div class="info-box-content">
|
|
<div class="info-box-header">
|
|
<div class="info-box-title">{{ props.title }}</div>
|
|
<div class="info-box-subtext">{{ props.infoSubtext }}</div>
|
|
</div>
|
|
<div class="info-box-summary clamp-6">{{ props.summary }}</div>
|
|
<div class="info-box-misc-info">
|
|
<div class="date">{{ props.date }}</div>
|
|
<div class="runtime">{{ props.runtime }}</div>
|
|
<div class="imdb">
|
|
<font-awesome-icon icon="fa-solid fa-star" size="xs" class="star-rating" />
|
|
{{ props.imdbRating }}
|
|
</div>
|
|
<div class="mpaa">
|
|
<span class="age-rating sm">{{ props.MPAA }}</span>
|
|
</div>
|
|
<div class="ends-at">Ends at 6:23pm</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="scroller-item-title clamp-2" :style="{ maxWidth: `${120 - 5}px` }">
|
|
{{ props.title }}
|
|
</div>
|
|
<div class="scroller-item-subtext clamp" :style="{ maxWidth: `${120 - 5}px` }">
|
|
{{ props.subtext }}
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.scroller-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
/* .scroller-item:hover {
|
|
cursor: pointer;
|
|
} */
|
|
.play-icon {
|
|
position: absolute;
|
|
top: 75px;
|
|
left: 35px;
|
|
width: 35px;
|
|
height: 35px;
|
|
cursor: pointer;
|
|
z-index: 2;
|
|
opacity: 0%;
|
|
padding: 0.75em;
|
|
background: rgba(255, 255, 255, 0.2);
|
|
color: rgba(255, 255, 255, 0.5);
|
|
border-radius: 16px;
|
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
|
|
backdrop-filter: blur(4px);
|
|
-webkit-backdrop-filter: blur(4px);
|
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
|
transition: background 10ms linear 0ms;
|
|
}
|
|
.play-icon:hover {
|
|
background: rgba(122, 122, 122, 0.2);
|
|
}
|
|
.scroller-item-img:hover .play-icon {
|
|
top: 100px;
|
|
left: 55px;
|
|
opacity: 100%;
|
|
transition:
|
|
all var(--hover-animation-speed) ease var(--hover-animation-delay),
|
|
z-index 1ms,
|
|
background 10ms linear 0ms;
|
|
z-index: 5;
|
|
visibility: visible;
|
|
}
|
|
.scroller-item-img {
|
|
position: relative;
|
|
}
|
|
.scroller-item-img img {
|
|
position: relative;
|
|
background-size: cover;
|
|
z-index: 1;
|
|
transition-duration: 0.3s;
|
|
}
|
|
.scroller-item-img:hover img {
|
|
transform: scale(1.35) translateX(16px) translateY(23px);
|
|
cursor: pointer;
|
|
transition:
|
|
all var(--hover-animation-speed) ease,
|
|
z-index 1ms;
|
|
transition-delay: var(--hover-animation-delay);
|
|
position: relative;
|
|
z-index: 4;
|
|
}
|
|
.poster-tag {
|
|
position: absolute;
|
|
right: 0px;
|
|
top: 6px;
|
|
z-index: 2;
|
|
font-weight: 500;
|
|
font-size: 13px;
|
|
width: 36px;
|
|
background: rgba(0, 0, 0, 0.4);
|
|
color: rgba(255, 255, 255, 1);
|
|
border-radius: 16px 0px 0px 16px;
|
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
|
|
backdrop-filter: blur(2.6px);
|
|
-webkit-backdrop-filter: blur(2.6px);
|
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
text-align: center;
|
|
transition: all var(--hover-animation-speed) ease 0.2s;
|
|
opacity: 100%;
|
|
}
|
|
.scroller-item-img:hover .poster-tag {
|
|
opacity: 0%;
|
|
transition: all var(--hover-animation-speed) ease 0.2s;
|
|
/* transition-delay: var(--hover-animation-delay); */
|
|
/* transform: translateX(10px); */
|
|
}
|
|
.scroller-item-title {
|
|
text-align: center;
|
|
}
|
|
.scroller-item-subtext {
|
|
color: var(--color-text-faded);
|
|
max-width: 245px;
|
|
text-align: center;
|
|
}
|
|
.info-box {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
z-index: 0;
|
|
width: 120px;
|
|
height: 180px;
|
|
visibility: hidden;
|
|
background-color: var(--color-background-grey);
|
|
transition-duration: 0.3s;
|
|
}
|
|
.scroller-item-img:hover .info-box {
|
|
visibility: visible;
|
|
transform: translateX(162px);
|
|
width: 360px;
|
|
height: 243px;
|
|
z-index: 3;
|
|
transition:
|
|
all var(--hover-animation-speed) ease var(--hover-animation-delay),
|
|
z-index 1ms var(--hover-animation-delay);
|
|
}
|
|
.info-box-content {
|
|
width: 90%;
|
|
margin: 0 auto;
|
|
padding: 1em;
|
|
max-height: 180px;
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: baseline;
|
|
justify-content: space-between;
|
|
gap: 2em;
|
|
min-height: 95%;
|
|
}
|
|
.scroller-item:hover .info-box-content {
|
|
max-height: 240px;
|
|
transition-delay: 0.05s;
|
|
}
|
|
.info-box-title {
|
|
font-weight: 600;
|
|
font-size: 18px;
|
|
}
|
|
.info-box-subtext {
|
|
color: var(--color-text-faded);
|
|
}
|
|
.info-box-misc-info {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
min-width: 90%;
|
|
}
|
|
</style>
|