266 lines
14 KiB
HTML
266 lines
14 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||
<title>{{.metaTitle}}</title>
|
||
{{template "seoCommon" .}}
|
||
{{/* 夸克 / QQ(X5):页内播放适配。不要写 x5-fullscreen,否则 QQ 会接管成系统播放器 */}}
|
||
<meta name="renderer" content="webkit">
|
||
<meta name="force-rendering" content="webkit">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
<meta name="x5-orientation" content="portrait">
|
||
<meta name="x5-page-mode" content="app">
|
||
<meta name="browsermode" content="application">
|
||
<meta name="imagemode" content="force">
|
||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||
<script src="/static/js/common/compat.js?v=4"></script>
|
||
<link rel="stylesheet" href="/static/css/base.css?v=2">
|
||
<link rel="stylesheet" href="/static/common/DPlayer.min.css">
|
||
<link rel="stylesheet" href="/static/css/play.css?v=27">
|
||
<script defer src="/static/common/hls.min.js"></script>
|
||
<script defer src="/static/common/DPlayer.min.js?v=2"></script>
|
||
</head>
|
||
<body class="page-play page-series-play">
|
||
{{template "header" .}}
|
||
|
||
<header class="page-subheader only-h5" aria-label="播放页顶栏">
|
||
<a class="page-subheader__btn" href="javascript:history.back()" aria-label="返回">
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-left.svg" alt="返回">
|
||
</a>
|
||
<div class="page-subheader__title">{{if .video.Title}}{{.video.Title}}{{else}}视频播放{{end}}</div>
|
||
<button class="page-subheader__btn" type="button" aria-label="分享" data-share-page>
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/share.svg" alt="分享">
|
||
</button>
|
||
</header>
|
||
|
||
<div class="page play-page">
|
||
<main class="main play-main">
|
||
<nav class="breadcrumb play-breadcrumb only-pc" aria-label="面包屑">
|
||
<a class="breadcrumb__item" href="/">首页</a>
|
||
<img decoding="async" loading="lazy" class="breadcrumb__sep" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
|
||
<a class="breadcrumb__item" href="/series">视频</a>
|
||
<img decoding="async" loading="lazy" class="breadcrumb__sep" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
|
||
<span class="breadcrumb__item is-current">{{if .video.Title}}{{.video.Title}}{{else}}播放{{end}}</span>
|
||
</nav>
|
||
|
||
<section class="play-stage" aria-label="播放器">
|
||
<div
|
||
class="play-player{{if not .canWatch}} play-player--locked{{end}}"
|
||
data-play-player
|
||
data-video-id="{{.videoID}}"
|
||
data-can-watch="{{if .canWatch}}1{{else}}0{{end}}"
|
||
>
|
||
{{if and .canWatch .videoURL}}
|
||
<div class="dplayer-video" data-url="{{.videoURL}}"></div>
|
||
{{end}}
|
||
|
||
<img decoding="async" loading="lazy"
|
||
class="play-player__cover lazy"
|
||
src="/static/images/placeholder.png?v=2"
|
||
data-src="{{if .cover}}{{.cover}}{{else}}{{.video.Video.Cover}}{{end}}"
|
||
|
||
data-play-poster
|
||
alt="{{if .video.Title}}{{.video.Title}}{{else}}视频{{end}}"
|
||
>
|
||
<div class="play-player__scrim" aria-hidden="true"></div>
|
||
<div class="play-player__dim" aria-hidden="true"></div>
|
||
|
||
<button
|
||
class="play-player__center"
|
||
type="button"
|
||
aria-label="播放"
|
||
{{if .canWatch}}data-play-poster-play{{end}}
|
||
>
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/play.svg" alt="播放">
|
||
</button>
|
||
|
||
{{if not .canWatch}}
|
||
<div class="play-player__unlock">
|
||
<div class="play-player__unlock-icon" aria-hidden="true">
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/lock.svg" alt="解锁">
|
||
</div>
|
||
<p class="play-player__unlock-ep">{{if .video.Title}}{{.video.Title}}{{else}}视频{{end}}</p>
|
||
<p class="play-player__unlock-title">暂无法播放</p>
|
||
<p class="play-player__unlock-desc">当前视频地址不可用,请稍后再试。</p>
|
||
<div class="play-player__unlock-actions">
|
||
{{$appAddr := .appConfig.AppAddr}}
|
||
<a class="play-player__unlock-app" href="{{if $appAddr}}{{$appAddr}}{{else}}/download-app{{end}}"{{if $appAddr}} target="_blank" rel="sponsored nofollow noopener"{{end}}>
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/download.svg" alt="下载">
|
||
下载 App 免费看
|
||
</a>
|
||
</div>
|
||
</div>
|
||
{{end}}
|
||
|
||
<div class="play-player__badge">
|
||
<span class="only-pc">正片{{if .video.Video.VideoTime}} {{formatMediaTime .video.Video.VideoTime}}{{end}}</span>
|
||
<span class="only-h5">{{if .video.Video.VideoTime}}{{formatMediaTime .video.Video.VideoTime}}{{else}}正片{{end}}</span>
|
||
</div>
|
||
|
||
{{if not .canWatch}}
|
||
<div class="play-player__bar">
|
||
<div class="play-player__progress" aria-hidden="true">
|
||
<span class="play-player__progress-fill" style="width:0%"></span>
|
||
<span class="play-player__progress-thumb" style="left:0%"></span>
|
||
</div>
|
||
<div class="play-player__controls">
|
||
<div class="play-player__left">
|
||
<button class="play-player__icon" type="button" aria-label="播放" disabled>
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/play.svg" alt="播放">
|
||
</button>
|
||
<span class="play-player__time">00:00{{if .video.Video.VideoTime}} / {{formatMediaTime .video.Video.VideoTime}}{{end}}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{{end}}
|
||
</div>
|
||
|
||
<div class="play-tabs" aria-label="内容类型">
|
||
<a class="play-tabs__item is-active" href="#">正片</a>
|
||
<!-- <p class="play-tabs__hint only-pc">有播放地址时可直接观看</p> -->
|
||
</div>
|
||
</section>
|
||
|
||
<section class="play-info" aria-label="剧集信息">
|
||
<div class="play-meta">
|
||
<div class="play-meta__title-row">
|
||
<h1 class="play-meta__title">{{if .video.Title}}{{.video.Title}}{{else}}视频{{end}}</h1>
|
||
<span class="badge badge--hot">影集</span>
|
||
</div>
|
||
<div class="play-meta__chips">
|
||
{{if .video.Video.VideoTime}}<span class="play-chip">{{.video.Video.VideoTime}} 分钟</span>{{end}}
|
||
{{if and .video.Video.Width .video.Video.Height}}<span class="play-chip">{{.video.Video.Width}}×{{.video.Video.Height}}</span>{{end}}
|
||
<span class="play-chip">18+</span>
|
||
</div>
|
||
<p class="play-meta__stats only-pc">
|
||
{{if .video.TagsName}}标签 {{range $i, $t := .video.TagsName}}{{if $i}} {{end}}{{$t}}{{end}} {{end}}
|
||
{{if .video.WatchTimes}}热度 {{formatLikeCount .video.WatchTimes}}{{end}}
|
||
</p>
|
||
<p class="play-meta__stats only-h5">
|
||
{{range $i, $t := .video.TagsName}}{{if $i}} {{end}}{{$t}}{{end}}
|
||
{{if .video.WatchTimes}} 热度 {{formatLikeCount .video.WatchTimes}}{{end}}
|
||
</p>
|
||
</div>
|
||
|
||
<div class="play-actions">
|
||
<button
|
||
class="btn btn--primary play-actions__btn play-actions__btn--play"
|
||
type="button"
|
||
{{if .canWatch}}data-play-poster-play{{end}}
|
||
{{if not .canWatch}}disabled{{end}}
|
||
>
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/play_hollow.svg" alt="播放">
|
||
<span>立即播放</span>
|
||
</button>
|
||
<button class="btn btn--ghost play-actions__btn play-actions__btn--icon" type="button" aria-label="分享" data-share-page>
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/share.svg" alt="分享">
|
||
<span class="only-pc" data-share-page-label>分享</span>
|
||
</button>
|
||
<button class="btn btn--ghost play-actions__btn play-actions__btn--icon" type="button" aria-label="反馈">
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/message-circle.svg" alt="评论">
|
||
<span class="only-pc">反馈</span>
|
||
</button>
|
||
</div>
|
||
|
||
<div class="play-synopsis">
|
||
<div class="play-synopsis__head">
|
||
<h2 class="play-synopsis__title">简介</h2>
|
||
<button class="play-synopsis__more" type="button">
|
||
展开
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
|
||
</button>
|
||
</div>
|
||
<p class="play-synopsis__text">{{if .seoInfo.Description}}{{.seoInfo.Description}}{{else if .video.Title}}{{.video.Title}}{{else}}暂无简介{{end}}</p>
|
||
</div>
|
||
</section>
|
||
|
||
{{template "playLinks" .}}
|
||
|
||
{{template "appIcons" dict "Items" .appConfig.AList "Label" "播放页小图标"}}
|
||
|
||
<div class="play-promo">
|
||
{{template "ads" (adSlice .appConfig.DetailBannerList 0 2)}}
|
||
</div>
|
||
|
||
<section class="play-dual" aria-label="推荐与热榜">
|
||
{{if .guessLike}}
|
||
<section class="play-like" aria-label="猜你喜欢">
|
||
<div class="play-like__head">
|
||
<div class="play-like__titles">
|
||
<h2 class="play-like__title">猜你喜欢</h2>
|
||
<span class="play-like__desc only-pc">根据本剧题材推荐</span>
|
||
</div>
|
||
<button
|
||
type="button"
|
||
class="play-like__refresh"
|
||
data-guess-refresh
|
||
data-playlet-id="{{.guessPlayletID}}"
|
||
data-page="{{.guessPage}}"
|
||
data-page-size="{{if .guessPageSize}}{{.guessPageSize}}{{else}}6{{end}}"
|
||
data-total="{{.guessTotal}}"
|
||
>
|
||
换一批
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
|
||
</button>
|
||
</div>
|
||
<div class="play-like__grid" id="play-like" data-guess-grid>
|
||
{{range .guessLike}}
|
||
<article class="card card--play">
|
||
<a class="card__cover lazy" href="{{playURL .Slug .ID}}" style="{{cssCoverPlaceholder}}" data-src="{{.Cover}}">
|
||
{{if .TotalEpisode}}<span class="card__ep">全 {{.TotalEpisode}} 集</span>{{else}}<span class="card__ep">{{updateStatusText .UpdateStatus}}</span>{{end}}
|
||
</a>
|
||
<h3 class="card__title"><a href="{{playURL .Slug .ID}}">{{playletDisplayName .PlayName .Title}}</a></h3>
|
||
<p class="card__meta">{{range $ti, $tag := cardTags .}}{{if $ti}} {{end}}{{if $tag.URL}}<a href="{{$tag.URL}}" {{externalLinkAttrs $tag.URL}}>{{$tag.Name}}</a>{{else}}{{$tag.Name}}{{end}}{{end}}</p>
|
||
</article>
|
||
{{end}}
|
||
</div>
|
||
</section>
|
||
{{end}}
|
||
|
||
<aside class="play-hot" aria-label="热门短剧">
|
||
<div class="play-hot__head">
|
||
<h2 class="play-hot__title">热门短剧</h2>
|
||
<a class="play-hot__more" href="{{if .hotMoreURL}}{{.hotMoreURL}}{{else}}/list/all/0/2{{end}}" {{externalLinkAttrs .hotMoreURL}}>
|
||
完整榜单
|
||
<img decoding="async" loading="lazy" class="icon" src="/static/images/placeholder.png?v=2" data-src="/static/images/chevron-right.svg" alt="前往下一项">
|
||
</a>
|
||
</div>
|
||
<ol class="play-hot__list">
|
||
{{range $i, $item := .hotList}}
|
||
<li{{if ge $i 5}} class="only-pc"{{end}}>
|
||
<div class="play-hot__item">
|
||
<a class="play-hot__no{{if lt $i 3}} is-top{{end}}" href="{{playURL $item.Slug $item.ID}}">{{rankNo (add $i 1)}}</a>
|
||
<a class="play-hot__cover-link" href="{{playURL $item.Slug $item.ID}}">
|
||
<img decoding="async" loading="lazy" class="play-hot__cover lazy" src="/static/images/placeholder.png?v=2" data-src="{{$item.Cover}}" alt="{{playletDisplayName $item.PlayName $item.Title}}封面">
|
||
</a>
|
||
<span class="play-hot__info">
|
||
<a class="play-hot__name" href="{{playURL $item.Slug $item.ID}}">{{playletDisplayName $item.PlayName $item.Title}}</a>
|
||
<span class="play-hot__meta">
|
||
{{$tags := cardTags $item}}
|
||
{{range $ti, $tag := $tags}}{{if $ti}} {{end}}{{if $tag.URL}}<a href="{{$tag.URL}}" {{externalLinkAttrs $tag.URL}}>{{$tag.Name}}</a>{{else}}{{$tag.Name}}{{end}}{{end}}
|
||
{{if and $tags $item.TotalEpisode}} {{end}}{{if $item.TotalEpisode}}全 {{$item.TotalEpisode}} 集{{end}}
|
||
</span>
|
||
</span>
|
||
<a class="play-hot__heat" href="{{playURL $item.Slug $item.ID}}">{{formatLikeCount $item.HeatValue}}</a>
|
||
</div>
|
||
</li>
|
||
{{else}}
|
||
<li><p class="play-hot__empty" style="margin:0;padding:12px 0;color:var(--text-dim)">暂无热榜数据</p></li>
|
||
{{end}}
|
||
</ol>
|
||
</aside>
|
||
</section>
|
||
|
||
<div class="play-promo play-promo--bottom">
|
||
{{template "ads" (adSlice .appConfig.DetailBannerList 2 2)}}
|
||
</div>
|
||
</main>
|
||
</div>
|
||
|
||
{{template "footer" .}}
|
||
|
||
<script defer src="/static/js/pages/play.js?v=42"></script>
|
||
</body>
|
||
</html>
|