This commit is contained in:
谢宇宁
2026-09-24 12:42:30 +07:00
parent e14b3863fb
commit 613db5cb79
15 changed files with 758 additions and 660 deletions
+5 -577
View File
@@ -8,11 +8,6 @@
.detail-h5-bg,
.detail-h5-top,
.detail-h5-bar,
.detail-meta-h5,
.detail-intro-title,
.detail-episodes-status,
.detail-episode-ranges,
.detail-episode--preview,
.detail-related-title-h5,
.detail-related-refresh {
display: none;
@@ -50,169 +45,6 @@
line-height: 20px;
}
.detail-hero {
align-self: stretch;
width: 100%;
padding: 24px 48px 24px 24px;
background: rgba(255, 255, 255, 0.05);
overflow: hidden;
border-radius: 16px;
border: 1px solid rgba(255, 255, 255, 0.10);
justify-content: flex-start;
align-items: center;
gap: 24px;
display: flex;
box-sizing: border-box;
}
.detail-cover {
width: 300px;
height: 400px;
border-radius: 18px;
object-fit: cover;
flex-shrink: 0;
}
.detail-hero-main {
flex: 1 1 0;
min-width: 0;
min-height: 400px;
overflow: hidden;
flex-direction: column;
justify-content: center;
align-items: flex-start;
gap: 30px;
display: flex;
}
.detail-hero-info {
width: 100%;
overflow: hidden;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
gap: 30px;
display: flex;
}
.detail-tags {
align-self: stretch;
height: auto;
min-height: 26px;
overflow: visible;
justify-content: flex-start;
align-items: flex-start;
gap: 9px;
display: flex;
flex-wrap: wrap;
}
.detail-tag {
height: 26px;
max-width: 100%;
padding: 0 11px;
background: rgba(255, 255, 255, 0.10);
overflow: hidden;
border-radius: 13px;
justify-content: center;
align-items: center;
display: inline-flex;
color: #8A8A8A;
font-size: 12px;
font-family: PingFang SC;
font-weight: 400;
line-height: 18px;
box-sizing: border-box;
flex-shrink: 0;
white-space: nowrap;
text-overflow: ellipsis;
text-decoration: none;
}
.detail-tag--primary {
background: #ec237f;
color: #fff;
}
.detail-title {
margin: 0;
color: white;
font-size: 34px;
font-family: PingFang SC;
font-weight: 400;
line-height: 40px;
word-wrap: break-word;
}
.detail-meta {
color: #8A8A8A;
font-size: 12px;
font-family: PingFang SC;
font-weight: 400;
line-height: 18px;
word-wrap: break-word;
}
.detail-meta-pc {
display: flex;
align-items: center;
gap: 18px;
}
.detail-intro-block {
width: 100%;
}
.detail-intro {
margin: 0;
width: 100%;
color: #8A8A8A;
font-size: 12px;
font-family: PingFang SC;
font-weight: 400;
line-height: 18px;
word-wrap: break-word;
display: -webkit-box;
-webkit-line-clamp: 6;
-webkit-box-orient: vertical;
overflow: hidden;
}
.detail-intro-prefix-pc {
display: inline;
}
.detail-actions {
width: 100%;
height: 45px;
overflow: hidden;
justify-content: space-between;
align-items: center;
display: flex;
gap: 16px;
flex-wrap: wrap;
}
.detail-play-btn {
height: 45px;
padding: 0 12px;
background: #ec237f;
overflow: hidden;
border-radius: 23px;
justify-content: center;
align-items: center;
display: flex;
border: none;
cursor: pointer;
color: #181818;
font-size: 16px;
font-family: PingFang SC;
font-weight: 400;
line-height: 22px;
text-decoration: none;
box-sizing: border-box;
}
.detail-action-group {
justify-content: flex-start;
align-items: center;
@@ -274,78 +106,6 @@
background: rgba(255, 255, 255, 0.05);
}
.detail-episodes {
align-self: stretch;
width: 100%;
overflow: hidden;
flex-direction: column;
justify-content: flex-start;
align-items: flex-start;
gap: 16px;
display: flex;
}
.detail-episodes-head {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.detail-section-label {
color: #F5F5F5;
font-size: 18px;
font-family: PingFang SC;
font-weight: 600;
line-height: 27px;
}
.detail-episode-list {
width: 100%;
justify-content: flex-start;
align-items: flex-start;
gap: 14px;
display: flex;
flex-wrap: wrap;
}
.detail-episode-lock {
position: absolute;
top: 0;
right: 0;
padding: 0 4px;
border-radius: 0 7px 0 7px;
background: #ec237f;
color: #fff;
font-size: 9px;
font-family: PingFang SC;
font-weight: 500;
line-height: 14px;
pointer-events: none;
}
.detail-episode {
flex: 0 0 calc((100% - 98px) / 8);
width: calc((100% - 98px) / 8);
height: 54px;
position: relative;
background: rgba(255, 255, 255, 0.10);
overflow: hidden;
border-radius: 7px;
justify-content: center;
align-items: center;
display: flex;
border: none;
cursor: pointer;
color: #808080;
font-size: 12px;
font-family: PingFang SC;
font-weight: 400;
line-height: 18px;
text-decoration: none;
box-sizing: border-box;
}
.detail-comments {
align-self: stretch;
width: 100%;
@@ -750,220 +510,19 @@
box-sizing: border-box;
}
.detail-meta-pc,
.detail-actions,
.detail-comments,
.detail-related-desc,
.detail-related-title-pc,
.detail-episode-pc,
.detail-episodes-status-icon,
.detail-breadcrumb {
.detail-related-desc,
.detail-related-title-pc,
.detail-breadcrumb {
display: none !important;
}
.detail-meta-h5,
.detail-intro-title,
.detail-episodes-status,
.detail-episode-ranges,
.detail-episode--preview,
.detail-related-title-h5,
.detail-related-refresh,
.detail-h5-bar {
.detail-related-refresh,
.detail-h5-bar {
display: flex;
}
.detail-hero {
width: 100%;
padding: 0;
background: transparent;
border-radius: 0;
border: none;
display: grid;
grid-template-columns: 76px 1fr;
gap: 18px 12px;
align-items: start;
}
.detail-hero-main {
display: contents;
}
.detail-cover {
width: 76px;
height: 106px;
border-radius: 6px;
grid-column: 1;
grid-row: 1;
background: #D4D4D4;
}
.detail-hero-info {
grid-column: 2;
grid-row: 1;
width: auto;
gap: 12px;
min-width: 0;
}
.detail-title {
order: 1;
width: 100%;
max-width: 220px;
font-size: 16px;
font-weight: 500;
line-height: 22px;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.detail-meta {
order: 2;
}
.detail-meta-h5 {
align-items: flex-start;
gap: 6px;
color: white;
font-size: 12px;
line-height: 18px;
}
.detail-meta-dot {
flex-shrink: 0;
}
.detail-tags {
order: 3;
height: auto;
gap: 6px;
flex-wrap: wrap;
}
.detail-tag {
height: auto;
padding: 2px 6px;
background: rgba(255, 255, 255, 0.10);
border-radius: 3px;
color: white;
}
.detail-tag--primary {
background: rgba(255, 255, 255, 0.10);
color: white;
}
.detail-intro-block {
grid-column: 1 / -1;
max-width: none;
display: flex;
flex-direction: column;
gap: 12px;
}
.detail-intro-title {
color: white;
font-size: 16px;
font-weight: 500;
line-height: 22px;
}
.detail-intro {
color: white;
-webkit-line-clamp: 3;
}
.detail-intro-prefix-pc {
display: none;
}
.detail-episodes {
width: 100%;
gap: 12px;
}
.detail-episodes-head {
width: 100%;
}
.detail-section-label {
color: white;
font-size: 14px;
font-weight: 400;
line-height: 20px;
}
.detail-episodes-status {
align-items: center;
gap: 2px;
color: rgba(255, 255, 255, 0.35);
font-size: 12px;
line-height: 18px;
}
.detail-episode-ranges {
width: 100%;
align-items: center;
gap: 24px;
}
.detail-episode-range {
background: none;
border: none;
padding: 0;
cursor: pointer;
color: rgba(255, 255, 255, 0.55);
font-size: 14px;
font-family: PingFang SC;
font-weight: 400;
line-height: 20px;
}
.detail-episode-range--active {
color: white;
}
.detail-episode-list {
width: 100%;
display: flex;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: center;
gap: 6px;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
}
.detail-episode-list::-webkit-scrollbar {
display: none;
}
.detail-episode.is-range-hidden {
display: none !important;
}
.detail-episode {
flex: 0 0 58px;
width: 58px;
min-width: 58px;
height: 58px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.10);
color: white;
font-size: 18px;
font-weight: 400;
line-height: 24px;
}
.detail-episode::before {
content: attr(data-ep);
width: 24px;
text-align: center;
}
.detail-related {
width: 100%;
gap: 12px;
@@ -1265,90 +824,6 @@
flex-shrink: 0;
}
.detail-hero {
min-height: 0;
padding: calc(24px * var(--detail-s)) calc(48px * var(--detail-s)) calc(24px * var(--detail-s)) calc(24px * var(--detail-s));
background: rgba(255, 255, 255, 0.05);
border: 0;
outline: 1px solid rgba(255, 255, 255, 0.10);
outline-offset: -1px;
border-radius: calc(16px * var(--detail-s));
gap: calc(24px * var(--detail-s));
}
.detail-cover {
width: calc(300px * var(--detail-s));
height: calc(400px * var(--detail-s));
border-radius: calc(18px * var(--detail-s));
}
.detail-hero-main {
min-height: calc(400px * var(--detail-s));
gap: calc(30px * var(--detail-s));
}
.detail-hero-info { gap: calc(30px * var(--detail-s)); }
.detail-tags {
gap: calc(9px * var(--detail-s));
height: calc(26px * var(--detail-s));
overflow: hidden;
}
.detail-tag {
height: calc(26px * var(--detail-s));
padding: 0 calc(11px * var(--detail-s));
border-radius: calc(6px * var(--detail-s));
background: rgba(255, 255, 255, 0.10);
color: rgba(255, 255, 255, 0.55);
font-size: calc(12px * var(--detail-s));
line-height: calc(18px * var(--detail-s));
}
.detail-tag--primary { background: #ec237f; color: #fff; }
.detail-title {
font-size: calc(24px * var(--detail-s));
font-weight: 600;
line-height: calc(32px * var(--detail-s));
}
.detail-meta {
color: rgba(255, 255, 255, 0.55);
font-size: calc(16px * var(--detail-s));
line-height: calc(22px * var(--detail-s));
}
.detail-meta-pc { gap: calc(18px * var(--detail-s)); }
.detail-intro {
color: rgba(255, 255, 255, 0.55);
font-size: calc(14px * var(--detail-s));
line-height: calc(20px * var(--detail-s));
}
.detail-actions {
height: calc(45px * var(--detail-s));
justify-content: space-between;
}
.detail-play-btn {
height: calc(45px * var(--detail-s));
padding: 0 calc(12px * var(--detail-s));
gap: calc(4px * var(--detail-s));
border-radius: calc(23px * var(--detail-s));
background: #ec237f;
color: #fff;
font-size: calc(16px * var(--detail-s));
line-height: calc(22px * var(--detail-s));
}
.detail-play-btn img {
width: calc(16px * var(--detail-s));
height: calc(17px * var(--detail-s));
filter: brightness(0) invert(1);
}
.detail-action-group { gap: calc(16px * var(--detail-s)); }
.detail-action {
@@ -1379,52 +854,6 @@
background: rgba(255, 255, 255, 0.05);
}
.detail-episodes { gap: calc(14px * var(--detail-s)); }
.detail-section-label {
font-size: calc(24px * var(--detail-s));
font-weight: 500;
line-height: calc(32px * var(--detail-s));
}
.detail-episode-pc {
display: none !important;
}
.detail-episode-list {
display: grid;
grid-template-columns: repeat(auto-fill, calc(58px * var(--detail-s)));
justify-content: space-between;
align-items: center;
gap: calc(12px * var(--detail-s)) calc(7px * var(--detail-s));
overflow: hidden;
}
.detail-episode {
flex: none;
width: calc(58px * var(--detail-s));
min-width: calc(58px * var(--detail-s));
height: calc(58px * var(--detail-s));
border-radius: calc(10px * var(--detail-s));
background: rgba(255, 255, 255, 0.10);
color: #fff;
font-size: calc(18px * var(--detail-s));
font-weight: 400;
line-height: calc(24px * var(--detail-s));
}
.detail-episode.is-active,
.detail-episode.detail-episode--active {
background: rgba(255, 74, 74, 0.08);
color: #ec237f;
}
.detail-episode::before {
content: attr(data-ep);
width: calc(24px * var(--detail-s));
text-align: center;
}
.content-official-info {
padding: calc(24px * var(--detail-s)) calc(30px * var(--detail-s));
border-radius: calc(18px * var(--detail-s));
@@ -1579,7 +1008,6 @@
.detail-main,
.detail-sidebar { display: contents; }
.detail-episodes,
.detail-related {
padding-top: 18px;
border-top: 1px solid rgba(255, 255, 255, .1);
+557
View File
@@ -0,0 +1,557 @@
/* 详情页:信息卡(海报 + 剧集信息)与选集卡,结构参考 huangguoai.com 详情页,配色沿用品牌粉。 */
.dh-card {
width: 100%;
padding: 32px;
background: #1A1A1A;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 20px;
box-sizing: border-box;
font-family: PingFang SC, sans-serif;
}
/* ---------- 信息卡 ---------- */
.dh-hero {
display: flex;
align-items: flex-start;
gap: 28px;
}
.dh-poster {
position: relative;
flex: 0 0 210px;
aspect-ratio: 3 / 4;
display: block;
overflow: hidden;
border-radius: 12px;
background: #111;
}
.dh-poster-img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
transition: transform 0.3s ease;
}
.dh-poster:hover .dh-poster-img {
transform: scale(1.04);
}
.dh-poster-badge {
position: absolute;
top: 8px;
left: 8px;
padding: 2px 8px;
background: #EC237F;
border-radius: 6px;
color: #FFFFFF;
font-size: 12px;
font-weight: 600;
line-height: 18px;
}
.dh-poster-eps {
position: absolute;
right: 8px;
bottom: 8px;
padding: 2px 8px;
background: rgba(0, 0, 0, 0.65);
border-radius: 6px;
color: #FFFFFF;
font-size: 12px;
font-weight: 600;
line-height: 18px;
}
.dh-poster-play {
position: absolute;
top: 50%;
left: 50%;
width: 56px;
height: 56px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(236, 35, 127, 0.88);
border-radius: 50%;
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4);
transform: translate(-50%, -50%);
transition: transform 0.2s ease, background 0.2s ease;
}
.dh-poster-play img {
width: 22px;
height: 22px;
margin-left: 3px;
}
/* player.svg 本身是黑色填充,粉底上统一显示为白色 */
.dh-poster-play img,
.dh-btn--primary img {
filter: brightness(0) invert(1);
}
.dh-poster:hover .dh-poster-play {
background: #EC237F;
transform: translate(-50%, -50%) scale(1.08);
}
.dh-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
.dh-brand {
display: flex;
align-items: center;
gap: 8px;
color: #FFFFFF;
font-size: 14px;
line-height: 20px;
}
.dh-brand-avatar {
width: 28px;
height: 28px;
border-radius: 50%;
}
.dh-title {
margin: 0;
color: #FFFFFF;
font-size: 32px;
font-weight: 600;
line-height: 42px;
}
.dh-meta {
display: flex;
flex-wrap: wrap;
align-items: center;
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
line-height: 20px;
}
.dh-meta span + span::before {
content: "·";
margin: 0 8px;
color: rgba(255, 255, 255, 0.35);
}
.dh-intro-title {
margin: 6px 0 0;
color: #FFFFFF;
font-size: 16px;
font-weight: 600;
line-height: 24px;
}
.dh-intro {
margin: 0;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
color: rgba(255, 255, 255, 0.72);
font-size: 14px;
line-height: 22px;
}
.dh-intro.is-expanded {
display: block;
-webkit-line-clamp: unset;
}
.dh-intro-toggle {
margin-top: -6px;
padding: 0;
background: none;
border: 0;
color: #EC237F;
font-size: 13px;
line-height: 20px;
cursor: pointer;
}
.dh-tags,
.dh-themes {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.dh-tag {
padding: 4px 12px;
background: rgba(255, 255, 255, 0.08);
border-radius: 999px;
color: rgba(255, 255, 255, 0.85);
font-size: 12px;
line-height: 18px;
text-decoration: none;
transition: background 0.18s ease, color 0.18s ease;
}
a.dh-tag:hover {
background: rgba(236, 35, 127, 0.16);
color: #EC237F;
}
.dh-themes-label {
color: rgba(255, 255, 255, 0.5);
font-size: 13px;
line-height: 20px;
}
.dh-theme {
padding: 3px 12px;
border: 1px solid rgba(236, 35, 127, 0.6);
border-radius: 999px;
color: #EC237F;
font-size: 13px;
line-height: 18px;
text-decoration: none;
}
a.dh-theme:hover {
background: rgba(236, 35, 127, 0.12);
}
.dh-actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 6px;
}
.dh-btn {
height: 48px;
padding: 0 24px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
background: transparent;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 999px;
box-sizing: border-box;
color: #FFFFFF;
font-family: inherit;
font-size: 16px;
font-weight: 600;
line-height: 22px;
text-decoration: none;
white-space: nowrap;
cursor: pointer;
transition: border-color 0.18s ease, background 0.18s ease, filter 0.18s ease;
}
.dh-btn img {
width: 18px;
height: 18px;
}
.dh-btn:hover {
border-color: rgba(255, 255, 255, 0.45);
background: rgba(255, 255, 255, 0.04);
}
.dh-btn--primary {
padding: 0 32px;
background: #EC237F;
border-color: #EC237F;
}
.dh-btn--primary:hover {
background: #EC237F;
border-color: #EC237F;
filter: brightness(1.08);
}
/* ---------- 选集卡 ---------- */
.dh-episodes-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
}
.dh-episodes-title {
margin: 0;
color: #FFFFFF;
font-size: 20px;
font-weight: 600;
line-height: 28px;
}
.dh-episodes-sub {
margin-top: 4px;
color: rgba(255, 255, 255, 0.5);
font-size: 13px;
line-height: 20px;
}
.dh-episodes-hint {
flex-shrink: 0;
color: #EC237F;
font-size: 13px;
line-height: 28px;
}
.dh-ranges {
display: flex;
gap: 8px;
margin-top: 16px;
overflow-x: auto;
scrollbar-width: none;
}
.dh-ranges::-webkit-scrollbar {
display: none;
}
.dh-range {
flex: 0 0 auto;
height: 32px;
padding: 0 14px;
background: rgba(255, 255, 255, 0.06);
border: 0;
border-radius: 8px;
color: rgba(255, 255, 255, 0.7);
font-family: inherit;
font-size: 13px;
cursor: pointer;
}
.dh-range.is-active {
background: rgba(236, 35, 127, 0.16);
color: #EC237F;
}
.dh-ep-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(88px, 1fr));
gap: 12px 10px;
margin-top: 16px;
}
.dh-ep {
position: relative;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.06);
border-radius: 10px;
color: #FFFFFF;
font-size: 15px;
font-weight: 500;
text-decoration: none;
transition: background 0.18s ease, color 0.18s ease;
}
.dh-ep:hover {
background: rgba(236, 35, 127, 0.18);
color: #EC237F;
}
.dh-ep.is-range-hidden {
display: none;
}
.dh-ep-lock {
position: absolute;
top: -6px;
right: -4px;
padding: 0 5px;
background: #EC237F;
border-radius: 6px 6px 6px 0;
color: #FFFFFF;
font-size: 10px;
font-weight: 600;
line-height: 15px;
}
/* ---------- 官方地址卡(详情页内,含手机端) ---------- */
body.is-detail-page .content-official-info {
display: grid !important;
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
gap: 14px 24px;
padding: 24px 32px;
background: #1A1A1A;
outline: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 20px;
color: rgba(255, 255, 255, 0.55);
font-size: 13px;
line-height: 20px;
}
body.is-detail-page .content-official-info::before {
content: "官方地址 · 请收藏,防止迷路";
grid-column: 1 / -1;
color: #FFFFFF;
font-size: 16px;
font-weight: 600;
line-height: 24px;
}
body.is-detail-page .content-official-info a {
color: #EC237F;
font-size: 14px;
word-break: break-all;
}
/* ---------- 平板:信息卡缩小海报 ---------- */
@media (min-width: 768px) and (max-width: 1023px) {
.dh-card {
padding: 24px;
}
.dh-poster {
flex-basis: 170px;
}
.dh-title {
font-size: 26px;
line-height: 36px;
}
}
/* ---------- 手机 ---------- */
@media (max-width: 767px) {
.dh-card {
padding: 16px;
background: rgba(26, 26, 26, 0.82);
border-radius: 16px;
-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);
}
.dh-hero {
flex-direction: column;
gap: 16px;
}
.dh-poster {
flex: none;
width: 48%;
max-width: 190px;
}
.dh-poster-play {
width: 46px;
height: 46px;
}
.dh-poster-play img {
width: 18px;
height: 18px;
}
.dh-info {
width: 100%;
gap: 10px;
}
.dh-brand {
font-size: 13px;
}
.dh-brand-avatar {
width: 24px;
height: 24px;
}
.dh-title {
font-size: 22px;
line-height: 30px;
}
.dh-meta {
font-size: 12px;
line-height: 18px;
}
.dh-meta span + span::before {
margin: 0 6px;
}
.dh-intro-title {
font-size: 15px;
line-height: 22px;
}
.dh-intro {
font-size: 13px;
line-height: 20px;
}
.dh-actions {
width: 100%;
gap: 10px;
}
.dh-actions {
flex-wrap: nowrap;
}
.dh-btn {
height: 42px;
padding: 0 14px;
gap: 6px;
font-size: 15px;
}
.dh-btn img {
width: 16px;
height: 16px;
}
.dh-btn--primary {
flex: 1;
padding: 0 16px;
}
.dh-episodes-title {
font-size: 17px;
line-height: 24px;
}
.dh-episodes-sub,
.dh-episodes-hint {
font-size: 12px;
}
.dh-episodes-hint {
line-height: 24px;
}
.dh-ep-grid {
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 10px 8px;
}
.dh-ep {
height: 42px;
font-size: 14px;
}
body.is-detail-page .content-official-info {
grid-template-columns: 1fr;
gap: 12px;
padding: 16px;
border-radius: 16px;
}
body.is-detail-page .content-official-info::before {
font-size: 15px;
line-height: 22px;
}
}
-1
View File
@@ -100,7 +100,6 @@
line-height: 20px;
}
body[class].is-detail-page .download-fab,
body[class].is-play-page .download-fab {
display: none !important;
}
+35
View File
@@ -1120,3 +1120,38 @@ a.footer-contact-line:focus-visible .footer-contact-url {
.floating-action {
translate: 0 calc(var(--footer-lift, 0px) * -1);
}
/* 手机页脚卡片底部:访问地址 */
@media (max-width: 767px) {
.site-shell .home-mobile-footer-addrs {
width: 100%;
padding-top: 14px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
flex-direction: column;
gap: 8px;
box-sizing: border-box;
}
.site-shell .home-mobile-footer-addr {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
color: rgba(255, 255, 255, 0.55);
font: 400 12px/18px "PingFang SC", sans-serif;
text-decoration: none;
}
.site-shell .home-mobile-footer-addr span:first-child {
flex: 0 0 auto;
}
.site-shell .home-mobile-footer-addr-url {
min-width: 0;
color: #EC237F;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
+30
View File
@@ -1569,3 +1569,33 @@ nav[aria-label="面包屑"] a:hover,
nav[aria-label="面包屑"] a:focus-visible {
color: #EC237F !important;
}
/* 手机页头:下载 App / 商务 TG 图标,样式同搜索按钮 */
.header-mobile-icon-link {
display: none;
}
@media (max-width: 767px) {
.header-mobile-icon-link {
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 24px;
border-radius: 50%;
background: rgba(255, 255, 255, 0.05);
}
.header-mobile-icon-link img {
width: 16px;
height: 16px;
display: block;
filter: brightness(0) invert(1);
}
.header-mobile-icon-link .header-mobile-icon-img--lg {
width: 18px;
height: 18px;
}
}
+10
View File
@@ -3484,3 +3484,13 @@ body.site-shell .theme-index-card:focus-visible > img {
animation: none;
}
}
/* 跑马灯里的官方地址链接 */
.home-page .home-announcement-link {
color: #EC237F;
text-decoration: none;
}
.home-page .home-announcement-link:hover {
text-decoration: underline;
}
+3
View File
@@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 3H16C18.7614 3 21 5.23858 21 8V16C21 18.7614 18.7614 21 16 21H8C5.23858 21 3 18.7614 3 16V8C3 5.23858 5.23858 3 8 3ZM11 6.5H13V11.5H15.75L12 15.25L8.25 11.5H11V6.5ZM8 16.75C8 16.3358 8.33579 16 8.75 16H15.25C15.6642 16 16 16.3358 16 16.75C16 17.1642 15.6642 17.5 15.25 17.5H8.75C8.33579 17.5 8 17.1642 8 16.75Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 482 B

+24 -5
View File
@@ -1,9 +1,9 @@
(function () {
var section = document.querySelector(".detail-episodes");
var section = document.querySelector("[data-dh-episodes]");
if (!section) return;
var ranges = section.querySelectorAll(".detail-episode-range");
var episodes = section.querySelectorAll(".detail-episode-list .detail-episode");
var ranges = section.querySelectorAll(".dh-range");
var episodes = section.querySelectorAll(".dh-ep");
if (!episodes.length) return;
if (!ranges.length) return;
@@ -17,7 +17,7 @@
function activate(btn) {
ranges.forEach(function (item) {
item.classList.toggle("detail-episode-range--active", item === btn);
item.classList.toggle("is-active", item === btn);
});
applyRange(Number(btn.dataset.rangeStart), Number(btn.dataset.rangeEnd));
}
@@ -28,10 +28,29 @@
});
});
var active = section.querySelector(".detail-episode-range--active") || ranges[0];
var active = section.querySelector(".dh-range.is-active") || ranges[0];
activate(active);
})();
// 简介超出行数时显示「展开 / 收起」
(function () {
var intro = document.querySelector("[data-dh-intro]");
var toggle = document.querySelector("[data-dh-intro-toggle]");
if (!intro || !toggle) return;
function sync() {
if (intro.classList.contains("is-expanded")) return;
toggle.hidden = intro.scrollHeight <= intro.clientHeight + 1;
}
toggle.addEventListener("click", function () {
var expanded = intro.classList.toggle("is-expanded");
toggle.textContent = expanded ? "收起" : "展开";
});
window.addEventListener("resize", sync);
sync();
})();
(function () {
var shareBtns = document.querySelectorAll("[data-detail-share]");
if (!shareBtns.length) return;
+1 -1
View File
@@ -108,7 +108,7 @@
el = el.parentElement;
}
if (!el || !el.closest) return;
var tag = el.closest(".poster-card-tag[data-tag-href], .ranking-card-tag[data-tag-href], .detail-tag[data-tag-href]");
var tag = el.closest(".poster-card-tag[data-tag-href], .ranking-card-tag[data-tag-href]");
if (!tag) return;
var href = tag.getAttribute("data-tag-href");
if (!href) return;
+1 -1
View File
@@ -1,5 +1,5 @@
{{define "downloadAppFloat"}} {{if .appConfig.AppAddr}}
<link rel="stylesheet" href="/static/css/downloadAppFloat.css?v=5" />
<link rel="stylesheet" href="/static/css/downloadAppFloat.css?v=6" />
<a
class="download-fab"
href="{{.appConfig.AppAddr}}"
+14 -1
View File
@@ -1,5 +1,5 @@
{{define "footer"}}
<link rel="stylesheet" href="/static/css/footer.css?v=14" />
<link rel="stylesheet" href="/static/css/footer.css?v=15" />
<footer class="home-mobile-footer">
<img class="home-mobile-footer-logo" src="/static/images/logo.png?v=3" width="127" height="40" alt="黄果短剧" title="黄果短剧" />
<div class="home-mobile-footer-legal">
@@ -35,6 +35,19 @@
<img src="/static/images/figma-home/mobile/footer-top.svg" width="36" height="36" alt="" />
</button>
</div>
{{if or .appConfig.NewURLAddr .appConfig.NewURLAddr1 .appConfig.ForeverURLAddr}}
<div class="home-mobile-footer-addrs" aria-label="访问地址">
{{if .appConfig.NewURLAddr}}
<a class="home-mobile-footer-addr" href="{{.appConfig.NewURLAddr}}" target="_blank" rel="sponsored nofollow noopener noreferrer"><span>最新地址</span><span class="home-mobile-footer-addr-url">{{.appConfig.NewURLAddr}}</span></a>
{{end}}
{{if .appConfig.NewURLAddr1}}
<a class="home-mobile-footer-addr" href="{{.appConfig.NewURLAddr1}}" target="_blank" rel="sponsored nofollow noopener noreferrer"><span>备用地址</span><span class="home-mobile-footer-addr-url">{{.appConfig.NewURLAddr1}}</span></a>
{{end}}
{{if .appConfig.ForeverURLAddr}}
<a class="home-mobile-footer-addr" href="{{.appConfig.ForeverURLAddr}}" target="_blank" rel="sponsored nofollow noopener noreferrer"><span>海外永久地址</span><span class="home-mobile-footer-addr-url">{{.appConfig.ForeverURLAddr}}</span></a>
{{end}}
</div>
{{end}}
</footer>
<footer class="footer-box">
<div class="footer-outer">
+13 -2
View File
@@ -1,5 +1,5 @@
{{define "header"}}
<link rel="stylesheet" href="/static/css/header.css?v=14" />
<link rel="stylesheet" href="/static/css/header.css?v=17" />
<header class="site-header">
<div class="header-inner">
<button
@@ -67,6 +67,17 @@
/>
</form>
{{if .appConfig.AppAddr}}
<a class="header-mobile-icon-link" href="{{.appConfig.AppAddr}}" target="_blank" rel="sponsored nofollow noopener noreferrer" data-download-app-open aria-label="下载 App">
<img class="header-mobile-icon-img--lg" src="/static/images/header-download.svg?v=2" width="18" height="18" alt="" />
</a>
{{end}}
{{$headerBizHref := footerContactURL "商务合作" "" .appConfig.GmailAddr .appConfig.TGGroup .appConfig.CustomerServiceHost}}
{{if $headerBizHref}}
<a class="header-mobile-icon-link" href="{{$headerBizHref}}"{{if hasPrefix $headerBizHref "http"}} target="_blank" rel="sponsored nofollow noopener noreferrer"{{end}} aria-label="商务合作 Telegram">
<img src="/static/images/figma-home/mobile/drawer-telegram.svg" width="16" height="16" alt="" />
</a>
{{end}}
<a class="header-mobile-search-link" href="/search/" aria-label="前往搜索页">
<img src="/static/images/figma-home/mobile/search.svg" width="16" height="16" alt="" />
</a>
@@ -157,6 +168,6 @@
<script defer src="/static/js/common/request.js?v=3"></script>
<script defer src="/static/common/imgDecypt.js?v=2"></script>
<script defer src="/static/js/pages/header.js?v=9"></script>
<script defer src="/static/js/pages/header.js?v=10"></script>
<script defer src="/static/js/pages/dialogLoader.js?v=7"></script>
{{template "toast" .}} {{template "eightPop" .}} {{template "dialogAd" .}} {{end}}
+56 -67
View File
@@ -20,7 +20,8 @@
<script type="application/ld+json">{{.jsonLD}}</script>
{{end}}
<link rel="stylesheet" href="/static/css/index.css?v=27">
<link rel="stylesheet" href="/static/css/detail.css?v=30">
<link rel="stylesheet" href="/static/css/detail.css?v=31">
<link rel="stylesheet" href="/static/css/detailHero.css?v=3">
</head>
@@ -55,90 +56,78 @@
</nav>
<div class="detail-layout">
<div class="detail-main">
<section class="detail-hero">
<img class="detail-cover lazy" src="/static/images/placeholder.png?v=2" data-src="{{coverURL .Cover .Banner}}" alt="{{.Title}}" title="{{.Title}}" />
<div class="detail-hero-main">
<div class="detail-hero-info">
{{$detailTags := namedTags .TagIDs .TagNames .TagSlugs}}
{{if $detailTags}}
<div class="detail-tags">
{{range $detailTags}}
{{if .URL}}
<a class="detail-tag" href="{{.URL}}" data-tag-href="{{.URL}}">{{.Name}}</a>
{{else}}
<span class="detail-tag">{{.Name}}</span>
{{end}}
{{end}}
</div>
<section class="dh-card dh-hero">
<a class="dh-poster" href="{{playURL .Slug .ID}}" aria-label="播放《{{.Title}}》">
<img class="dh-poster-img lazy" src="/static/images/placeholder.png?v=2" data-src="{{coverURL .Cover .Banner}}" alt="{{.Title}}" title="{{.Title}}" />
{{if .IsFeatured}}<span class="dh-poster-badge">爆剧</span>{{else if .IsRecommend}}<span class="dh-poster-badge">黄果原创</span>{{else if .IsNew}}<span class="dh-poster-badge">上新</span>{{end}}
{{if .TotalEpisode}}<span class="dh-poster-eps">{{if eq .UpdateStatus 2}}全{{.TotalEpisode}}集{{else}}更新至{{.TotalEpisode}}集{{end}}</span>{{end}}
<span class="dh-poster-play" aria-hidden="true"><img src="/static/images/player.svg" alt="" /></span>
</a>
<div class="dh-info">
<div class="dh-brand">
<img class="dh-brand-avatar" src="/favicon.png?v=3" width="36" height="36" alt="" />
<span>黄果短剧官方</span>
</div>
<h1 class="dh-title">{{.Title}}</h1>
<div class="dh-meta">
<span>{{updateStatusText .UpdateStatus}}</span>
{{if .TotalEpisode}}<span>共 {{.TotalEpisode}} 集</span>{{end}}
<span>{{browseText .CountBrowse}}</span>
{{with playletDateText .OnlineAt .MediaCreatedAt .CreatedAt}}<span>{{.}} 上线</span>{{end}}
</div>
<h2 class="dh-intro-title">{{.Title}}剧情简介</h2>
<p class="dh-intro" data-dh-intro>{{if .Desc}}{{.Desc}}{{else}}暂无简介{{end}}</p>
<button class="dh-intro-toggle" type="button" data-dh-intro-toggle hidden>展开</button>
{{$detailTags := namedTags .TagIDs .TagNames .TagSlugs}}
{{if $detailTags}}
<div class="dh-tags">
{{range $detailTags}}
{{if .URL}}<a class="dh-tag" href="{{.URL}}">{{.Name}}</a>{{else}}<span class="dh-tag">{{.Name}}</span>{{end}}
{{end}}
<h1 class="detail-title">{{.Title}}</h1>
<div class="detail-meta">
<span class="detail-meta-pc">
<span>集数:{{if .TotalEpisode}}{{.TotalEpisode}}集{{else}}更新中{{end}}</span>
<span>上线时间 : {{playletDateText .OnlineAt .MediaCreatedAt .CreatedAt}}</span>
</span>
<span class="detail-meta-h5">
<span>{{if .TotalEpisode}}全{{.TotalEpisode}}集{{else}}短剧{{end}}</span>
<span class="detail-meta-dot">·</span>
<span>{{browseText .CountBrowse}}</span>
</span>
</div>
</div>
<div class="detail-intro-block">
<h2 class="detail-intro-title">简介</h2>
<p class="detail-intro"><span class="detail-intro-prefix-pc">简介:</span>{{if .Desc}}{{.Desc}}{{else}}暂无简介{{end}}</p>
{{end}}
{{$themes := namedThemeTags .ThemeIDs .ThemeNames .ThemeSlugs}}
{{if $themes}}
<div class="dh-themes">
<span class="dh-themes-label">所属专题</span>
{{range $themes}}
{{if .URL}}<a class="dh-theme" href="{{.URL}}">{{.Name}}</a>{{else}}<span class="dh-theme">{{.Name}}</span>{{end}}
{{end}}
</div>
<div class="detail-actions">
<a class="detail-play-btn" href="{{playURL .Slug .ID}}"><img src="/static/images/player.svg" alt="" />立即播放</a>
<div class="detail-action-group">
<button class="detail-action" type="button" data-detail-share data-playlet-id="{{.ID}}">
<span class="detail-action-icon">
<img src="/static/images/share.svg" alt="分享" />
</span>
<span>分享</span>
</button>
<span class="detail-action-sep"></span>
<a class="detail-action" href="/feedback/">
<span class="detail-action-icon">
<img src="/static/images/feedback.svg" alt="反馈" />
</span>
<span>反馈</span>
</a>
</div>
{{end}}
<div class="dh-actions">
<a class="dh-btn dh-btn--primary" href="{{playURL .Slug .ID}}"><img src="/static/images/player.svg" alt="" />立即播放</a>
<button class="dh-btn" type="button" data-detail-share data-playlet-id="{{.ID}}"><img src="/static/images/share.svg" alt="" />分享</button>
<a class="dh-btn" href="/feedback/"><img src="/static/images/feedback.svg" alt="" />反馈</a>
</div>
</div>
</section>
{{template "contentPromo" $}}
<section class="detail-episodes">
<div class="detail-episodes-head">
<h2 class="detail-section-label">剧集</h2>
<div class="detail-episodes-status">
<span>{{updateStatusText .UpdateStatus}}{{if .TotalEpisode}} 共{{.TotalEpisode}}集{{end}}</span>
<img class="detail-episodes-status-icon" src="/static/images/arrow_right.svg" alt="查看选集" />
<section class="dh-card dh-episodes" data-dh-episodes>
<div class="dh-episodes-head">
<div>
<h2 class="dh-episodes-title">{{.Title}}选集</h2>
<div class="dh-episodes-sub">{{if .TotalEpisode}}共 {{.TotalEpisode}} 集 · {{end}}{{updateStatusText .UpdateStatus}}</div>
</div>
<span class="dh-episodes-hint">点击集数直接播放</span>
</div>
{{with $.episodeRanges}}
<div class="detail-episode-ranges">
{{range $i, $r := .}}
<button class="detail-episode-range{{if eq $i 0}} detail-episode-range--active{{end}}" type="button" data-range-start="{{$r.Start}}" data-range-end="{{$r.End}}">{{$r.Label}}</button>
{{if gt (len $.episodeRanges) 1}}
<div class="dh-ranges">
{{range $i, $r := $.episodeRanges}}
<button class="dh-range{{if eq $i 0}} is-active{{end}}" type="button" data-range-start="{{$r.Start}}" data-range-end="{{$r.End}}">{{$r.Label}}</button>
{{end}}
</div>
{{end}}
<div class="detail-episode-list">
<div class="dh-ep-grid">
{{$playletID := .ID}}
{{$playletSlug := .Slug}}
{{range .PlayletChapterInfo}}
{{if .AllowWatch}}
<a class="detail-episode" href="{{chapterPlayURL $playletSlug $playletID .ID}}" data-ep="{{.CurrentEpisode}}">
<span class="detail-episode-pc">第{{.CurrentEpisode}}集</span>
</a>
<a class="dh-ep" href="{{chapterPlayURL $playletSlug $playletID .ID}}" data-ep="{{.CurrentEpisode}}" aria-label="第{{.CurrentEpisode}}集">{{printf "%02d" .CurrentEpisode}}</a>
{{else}}
<a class="detail-episode detail-episode--locked" href="javascript:;" data-episode-locked data-ep="{{.CurrentEpisode}}" aria-label="第{{.CurrentEpisode}}集,下载APP观看">
<span class="detail-episode-pc">第{{.CurrentEpisode}}集</span>
<span class="detail-episode-lock" aria-hidden="true">APP</span>
</a>
<a class="dh-ep dh-ep--locked" href="javascript:;" data-episode-locked data-ep="{{.CurrentEpisode}}" aria-label="第{{.CurrentEpisode}}集,下载APP观看">{{printf "%02d" .CurrentEpisode}}<span class="dh-ep-lock" aria-hidden="true">APP</span></a>
{{end}}
{{else}}
<div class="section-empty">暂无剧集</div>
@@ -183,6 +172,6 @@
</main>
{{end}}
{{template "footer" .}}
<script src="/static/js/pages/detail.js?v=15"></script>
<script src="/static/js/pages/detail.js?v=16"></script>
</body>
</html>
+8 -4
View File
@@ -17,7 +17,7 @@
{{if .jsonLD}}
<script type="application/ld+json">{{.jsonLD}}</script>
{{end}}
<link rel="stylesheet" href="/static/css/index.css?v=38">
<link rel="stylesheet" href="/static/css/index.css?v=39">
{{/* PC 需要 Swiper 样式;H5 延后按需注入,避免首屏下载与强制重排 */}}
<link rel="stylesheet" href="/static/common/swiper-bundle.min.css" media="(min-width: 768px)">
<link rel="preload" href="/static/common/swiper-bundle.min.js" as="script" media="(min-width: 768px)">
@@ -73,7 +73,8 @@
</div>
{{end}}
{{if .announcements}}
{{$cfg := .appConfig}}
{{if or .announcements $cfg.ForeverURLAddr $cfg.NewURLAddr $cfg.NewURLAddr1}}
<div class="home-announcement" role="note" aria-label="站内公告">
<div class="home-announcement-label">
<picture>
@@ -83,8 +84,8 @@
</div>
<div class="home-announcement-content">
<div class="home-announcement-marquee">
<span class="home-announcement-copy">{{range $i, $announcement := .announcements}}{{if $i}}<span class="home-announcement-separator" aria-hidden="true"> · </span>{{end}}{{if $announcement.Title}}<span class="home-announcement-title">{{$announcement.Title}}</span>{{if $announcement.Content}}:{{end}}{{end}}{{$announcement.Content}}{{end}}</span>
<span class="home-announcement-copy" aria-hidden="true">{{range $i, $announcement := .announcements}}{{if $i}}<span class="home-announcement-separator"> · </span>{{end}}{{if $announcement.Title}}<span class="home-announcement-title">{{$announcement.Title}}</span>{{if $announcement.Content}}:{{end}}{{end}}{{$announcement.Content}}{{end}}</span>
<span class="home-announcement-copy">{{template "homeAnnouncementItems" .}}</span>
<span class="home-announcement-copy" aria-hidden="true">{{template "homeAnnouncementItems" .}}</span>
</div>
</div>
</div>
@@ -210,3 +211,6 @@
</body>
</html>
{{/* 跑马灯内容:后台公告在前,随后是官方访问地址 */}}
{{define "homeAnnouncementItems"}}{{$cfg := .appConfig}}{{$n := 0}}{{range .announcements}}{{if $n}}<span class="home-announcement-separator" aria-hidden="true"> · </span>{{end}}{{$n = 1}}{{if .Title}}<span class="home-announcement-title">{{.Title}}</span>{{if .Content}}:{{end}}{{end}}{{.Content}}{{end}}{{if $cfg.ForeverURLAddr}}{{if $n}}<span class="home-announcement-separator" aria-hidden="true"> · </span>{{end}}{{$n = 1}}<span class="home-announcement-title">海外永久地址</span>:<a class="home-announcement-link" href="{{$cfg.ForeverURLAddr}}" target="_blank" rel="sponsored nofollow noopener noreferrer">{{$cfg.ForeverURLAddr}}</a>{{end}}{{if $cfg.NewURLAddr}}{{if $n}}<span class="home-announcement-separator" aria-hidden="true"> · </span>{{end}}{{$n = 1}}<span class="home-announcement-title">最新地址</span>:<a class="home-announcement-link" href="{{$cfg.NewURLAddr}}" target="_blank" rel="sponsored nofollow noopener noreferrer">{{$cfg.NewURLAddr}}</a>{{end}}{{if $cfg.NewURLAddr1}}{{if $n}}<span class="home-announcement-separator" aria-hidden="true"> · </span>{{end}}{{$n = 1}}<span class="home-announcement-title">备用地址</span>:<a class="home-announcement-link" href="{{$cfg.NewURLAddr1}}" target="_blank" rel="sponsored nofollow noopener noreferrer">{{$cfg.NewURLAddr1}}</a>{{end}}<span class="home-announcement-separator" aria-hidden="true"> · </span>请收藏以上地址,防止迷路{{end}}
+1 -1
View File
@@ -26,7 +26,7 @@
<script type="application/ld+json">{{.jsonLD}}</script>
{{end}}
<link rel="stylesheet" href="/static/css/index.css?v=27">
<link rel="stylesheet" href="/static/css/detail.css?v=30">
<link rel="stylesheet" href="/static/css/detail.css?v=31">
<link rel="stylesheet" href="/static/css/play.css?v=27">
<link rel="stylesheet" href="/static/common/DPlayer.min.css">
<script defer src="/static/common/hls.min.js"></script>