fix media detail transparent backdrop

This commit is contained in:
jxxghp
2026-04-10 14:33:38 +08:00
parent 617223777b
commit d76a50c216
2 changed files with 50 additions and 10 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "moviepilot", "name": "moviepilot",
"version": "2.9.27", "version": "2.9.28",
"private": true, "private": true,
"type": "module", "type": "module",
"bin": "dist/service.js", "bin": "dist/service.js",
+49 -9
View File
@@ -86,8 +86,8 @@ const searchType = ref('title')
const chooseSiteDialog = ref(false) const chooseSiteDialog = ref(false)
// 计算主题是否为透明 // 计算主题是否为透明
const isNonTransparentTheme = computed(() => { const isTransparentTheme = computed(() => {
return theme.name.value !== 'transparent' return theme.name.value === 'transparent'
}) })
// 查询所有站点 // 查询所有站点
@@ -567,12 +567,16 @@ onBeforeMount(() => {
<template> <template>
<LoadingBanner v-if="!isRefreshed" class="mt-12" /> <LoadingBanner v-if="!isRefreshed" class="mt-12" />
<div v-if="mediaDetail.tmdb_id || mediaDetail.douban_id || mediaDetail.bangumi_id" class="max-w-8xl mx-auto px-4"> <div
<template v-if="(getBackdropUrl || getPosterUrl) && isNonTransparentTheme"> v-if="mediaDetail.tmdb_id || mediaDetail.douban_id || mediaDetail.bangumi_id"
<div class="vue-media-back absolute left-0 top-0 w-full h-96"> class="max-w-8xl mx-auto px-4"
:class="{ 'media-detail-transparent': isTransparentTheme }"
>
<template v-if="getBackdropUrl || getPosterUrl">
<div class="vue-media-back vue-media-back-image absolute left-0 top-0 w-full h-96">
<VImg class="h-96" position="top" :src="getBackdropUrl || getPosterUrl" cover /> <VImg class="h-96" position="top" :src="getBackdropUrl || getPosterUrl" cover />
</div> </div>
<div class="vue-media-back absolute left-0 top-0 w-full h-96" /> <div class="vue-media-back vue-media-back-overlay absolute left-0 top-0 w-full h-96" />
</template> </template>
<div class="media-page"> <div class="media-page">
<div class="media-header"> <div class="media-header">
@@ -1038,18 +1042,54 @@ onBeforeMount(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
.vue-media-back { .vue-media-back {
--media-backdrop-edge-opacity: 1;
z-index: 0;
pointer-events: none;
background-image: linear-gradient( background-image: linear-gradient(
180deg, 180deg,
rgba(var(--v-theme-background), 0) 50%, rgba(var(--v-theme-background), 0) 50%,
rgba(var(--v-theme-background), 1) 100% rgba(var(--v-theme-background), var(--media-backdrop-edge-opacity)) 100%
), ),
linear-gradient(90deg, rgba(var(--v-theme-background), 0) 50%, rgba(var(--v-theme-background), 1) 100%), linear-gradient(
linear-gradient(270deg, rgba(var(--v-theme-background), 0) 50%, rgba(var(--v-theme-background), 1) 100%); 0deg,
rgba(var(--v-theme-background), 0) 80%,
rgba(var(--v-theme-background), var(--media-backdrop-edge-opacity)) 100%
),
linear-gradient(
90deg,
rgba(var(--v-theme-background), 0) 50%,
rgba(var(--v-theme-background), var(--media-backdrop-edge-opacity)) 100%
),
linear-gradient(
270deg,
rgba(var(--v-theme-background), 0) 50%,
rgba(var(--v-theme-background), var(--media-backdrop-edge-opacity)) 100%
);
margin-block-start: calc(-70px - env(safe-area-inset-top)); margin-block-start: calc(-70px - env(safe-area-inset-top));
} }
.vue-media-back-image {
background-image: none;
}
.media-detail-transparent .vue-media-back-overlay {
display: none;
}
.media-detail-transparent .vue-media-back-image {
opacity: 0.78;
mask-image: linear-gradient(to bottom, transparent 0%, #000 16%, #000 58%, transparent 100%),
linear-gradient(to right, transparent 0%, #000 10%, #000 90%, transparent 100%);
mask-composite: intersect;
-webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 16%, #000 58%, transparent 100%),
linear-gradient(to right, transparent 0%, #000 10%, #000 90%, transparent 100%);
-webkit-mask-composite: source-in;
}
.media-page { .media-page {
position: relative; position: relative;
z-index: 1;
background-position: 50%; background-position: 50%;
background-size: cover; background-size: cover;
margin-block-start: calc(-4rem - env(safe-area-inset-top)); margin-block-start: calc(-4rem - env(safe-area-inset-top));