video-template-2

This commit is contained in:
make
2025-05-08 20:48:57 +08:00
parent ecbbb27f3f
commit a228bb8083
63 changed files with 8282 additions and 231 deletions

View File

@@ -20,6 +20,19 @@ $arrSiteData = [
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
[
'd_id' => 1002,
'd_domain' => 'video2.com',
'd_name' => '大地影视',
't_id' => '1002',
'd_keywords' => '大地影视',
'd_description' => '欢迎来到大地影视 - 大地影院免费高清电视剧大全,大地电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧',
'd_index_title' => '大地资源网在线观看免费官网-2024大地影院免费高清电视剧大全-https://video1.com-大地',
'd_index_keywords' => '大地资源网在线观看免费官网,2024大地影院免费高清电视剧大全,大地影院大全在线观看,短视频,搞笑视频,视频分享,免费视频,在线视频,预告片-大地',
'd_index_description' => '大地资源网在线观看免费官网(www.https://video1.com)2024大地影院免费高清电视剧大全,大地电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧、日剧等大地影视中文在线观看提供2024最新{{{video_type}}}电视剧免费观看-大地',
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
];

View File

@@ -285,8 +285,46 @@ function addHistoryFun(VideoInfo) {
}
function displayHistory() {
const defaultTemplate = `
<li class="active clearfix">
<div class="thumb">
<a class="v-thumb stui-vodlist__thumb lazyload-bg"
href="{{videoUrl}}"
title="{{videoName}}"
data-src="{{videoPic}}">
<span class="play hidden-xs"></span>
<span class="pic-text text-right">{{videoRemarks}}</span>
</a>
</div>
<div class="detail">
<h3 class="title">
<a href="{{videoUrl}}">{{videoName}}</a>
</h3>
<p class="hidden-mi">
<span class="text-muted">简介:</span>
{{videoDescription}}
</p>
<p class="hidden-mi">
<span class="text-muted">类型:</span>
{{videoCategory}}
<span class="split-line"></span>
<span class="hidden-xs">
<span class="split-line"></span>
<span class="text-muted">年份:</span>
{{videoYear}}
</span>
</p>
<p class="margin-0">
<a class="btn btn-min btn-primary" href="{{videoPlayUrl}}">立即播放</a>
  
<a class="btn btn-min btn-default" href="{{videoUrl}}">查看详情</a>
</p>
</div>
</li>
`;
// 渲染历史记录函数,接受自定义模板参数
function displayHistory(template = defaultTemplate) {
// 获取数据
const arrHistory = JSON.parse(localStorage.getItem(strHistoryKey)) || [];
@@ -297,103 +335,50 @@ function displayHistory() {
// 渲染列表
const historyContainer = document.getElementById('historyContainer');
if (!historyContainer) {
console.error('历史记录容器未找到');
return;
}
historyContainer.innerHTML = ''; // 清空原内容
arrHistory.forEach(Video => {
const VideoElement = document.createElement('li');
let strVideoUrl = formatVideoUrl(Video.v_name_en, Video.v_id)
let strVideoPlayUrl = formatVideoPlayUrl(Video.v_name_en,Video.v_id, 'default', 1)
let strSearchUrl = formatSearchUrl(Video.v_name, 1)
if (isMobile()) {
VideoElement.innerHTML = `
<li class="active clearfix">
<div class="thumb">
<a class="v-thumb stui-vodlist__thumb lazyload-bg"
href='${strVideoUrl}'
title="${Video.v_name}"
data-src="${Video.v_pic}">
<span class="play hidden-xs"></span>
<span class="pic-text text-right">${Video.v_remarks}</span>
</a>
</div>
<div class="detail">
<h3 class="title">
<a href='${strVideoUrl}'>${Video.v_name}</a>
</h3>
<p class="hidden-mi">
<span class="text-muted">简介:</span>
${Video.v_description}
</p>
<p class="hidden-mi">
<span class="text-muted">类型:</span>
${Video.v_category}
<span class="split-line"></span>
<span class="hidden-xs">
<span class="split-line"></span>
<span class="text-muted">年份:</span>
${Video.v_year}
</span>
</p>
<p class="margin-0">
<a class="btn btn-min btn-primary" href='${strVideoPlayUrl}'>立即播放</a>
&nbsp;&nbsp;
<a class="btn btn-min btn-default" href='${strVideoUrl}'>查看详情</a>
</p>
</div>
</li>
`;
} else {
VideoElement.innerHTML = `
<li class="active clearfix">
<div class="thumb">
<a class="v-thumb stui-vodlist__thumb lazyload-bg"
href='${strVideoUrl}'
title="${Video.v_name}"
data-src="${Video.v_pic}">
<span class="play hidden-xs"></span>
<span class="pic-text text-right">${Video.v_remarks}</span>
</a>
</div>
<div class="detail">
<h3 class="title">
<a href='${strVideoUrl}'>${Video.v_name}</a>
</h3>
<p class="hidden-mi">
<span class="text-muted">简介:</span>
${Video.v_description}
</p>
<p class="hidden-mi">
<span class="text-muted">类型:</span>
${Video.v_category}
<span class="split-line"></span>
<span class="hidden-xs">
<span class="split-line"></span>
<span class="text-muted">年份:</span>
${Video.v_year}
</span>
</p>
<p class="margin-0">
<a class="btn btn-min btn-primary" href='${strVideoPlayUrl}'>立即播放</a>
&nbsp;&nbsp;
<a class="btn btn-min btn-default" href='${strVideoUrl}'>查看详情</a>
</p>
</div>
</li>
`;
}
historyContainer.appendChild(VideoElement);
arrHistory.forEach((video) => {
// 生成URL
const strVideoUrl = formatVideoUrl(video.v_name_en, video.v_id);
const strVideoPlayUrl = formatVideoPlayUrl(video.v_name_en, video.v_id, 'default', 1);
const strSearchUrl = formatSearchUrl(video.v_name, 1);
// 替换模板中的占位符
const renderedTemplate = template
.replace(/{{videoUrl}}/g, strVideoUrl)
.replace(/{{videoName}}/g, escapeHtml(video.v_name)) // 防止XSS
.replace(/{{videoPic}}/g, escapeHtml(video.v_pic))
.replace(/{{videoRemarks}}/g, escapeHtml(video.v_remarks))
.replace(/{{videoDescription}}/g, escapeHtml(video.v_description))
.replace(/{{videoCategory}}/g, escapeHtml(video.v_category))
.replace(/{{videoYear}}/g, escapeHtml(video.v_year))
.replace(/{{videoActor}}/g, escapeHtml(video.v_area))
.replace(/{{videoPlayUrl}}/g, strVideoPlayUrl)
.replace(/{{searchUrl}}/g, strSearchUrl);
// 创建元素并添加到容器
const videoElement = document.createElement('li');
videoElement.innerHTML = renderedTemplate;
historyContainer.appendChild(videoElement);
});
}
// 防止XSS攻击的转义函数
function escapeHtml(str) {
if (!str) return '';
return str.replace(/[&<>"']/g, (match) => ({
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;'
}[match]));
}
// 方法1使用 fetch API
async function reportStats(data) {
try {
@@ -509,11 +494,12 @@ document.addEventListener("DOMContentLoaded", function () {
var ActivePlayUrl = arrPlayUrl[strPlayType][intPlayUrlIndex - 1]
strPlayUrl = ActivePlayUrl.url
}
initDPlayer(strPlayUrl)
}
addHistoryFun()
}
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -957,6 +957,13 @@ textarea.form-control{ height: auto;}
.video-play-page .stui-player__head a {
color: #fff;
}
.video-play-page .dplayer-video-wrap {
max-height: 168px;
}
.video-play-page video {
max-height: 168px;
}
}
/** 播放器 end */
@@ -970,6 +977,54 @@ textarea.form-control{ height: auto;}
/**
pc 导航 滚动
*/
@media (min-width: 769px) {
.stui-screen__list {
display: flex;
overflow-x: auto; /* 启用横向滚动 */
white-space: nowrap; /* 强制单行显示 */
scrollbar-width: thin; /* 滚动条宽度Firefox */
padding: 10px 0;
}
.stui-screen__list::-webkit-scrollbar {
height: 8px; /* 滚动条高度Chrome/Safari */
}
.stui-screen__list::-webkit-scrollbar-thumb {
background: #e0dfdf; /* 滚动条颜色 */
border-radius: 4px;
}
.stui-screen__list::-webkit-scrollbar-thumb:hover {
background: #8a8888; /* 滚动条悬停颜色 */
}
.stui-screen__list li {
flex: 0 0 auto; /* 防止缩小,保持原始宽度 */
margin-right: 12px; /* 导航项间距 */
}
.stui-screen__list li a,
.stui-screen__list li span {
display: inline-block;
padding: 8px 16px;
text-decoration: none;
font-size: 14px;
}
/* 清除浮动和默认样式 */
.stui-screen__list.clearfix::after {
content: none;
}
/* 保持active状态样式 */
.stui-screen__list li.active a {
color: #333; /* 可根据主题调整 */
font-weight: bold;
}
}

View File

@@ -0,0 +1,161 @@
@charset "utf-8";
/* style */
/* .lvshicms-panel,.lvshicms-panel-box{ padding: 10px;} */
.lvshicms-panel_hd{ padding: 10px;}
.lvshicms-panel-box.active{ margin: -10px;}
/* all */
body{ background: #f8f8f8; color: #666;}
/* text */
a,h1, h2, h3, h4, h5, h6,h1 a, h2 a, h3 a, h4 a, h5 a, h6 a{ color: #333;}
a:hover{ color: cornflowerblue;}
a.disabled{ cursor: not-allowed; opacity: 0.6;}
.text-333{ color: #333;}
.text-muted{ color: #999;}
.text-red{ color: red;}
.text-link{ color: blue;}
.text-fff{ color: #fff;}
/* form */
.form-control{ background-color:#F5F5F5; color: #999999; border: 1px solid #eee;}
.form-control:focus{ border-color:#2299dd; -webkit-box-shadow:inset 0 1px 1px rgba(255,136,0,.075),0 0 8px rgba(255,136,0,.6);}
/* btn */
.btn-default{ background-color: #eee; color: #333; background: linear-gradient(to right,#eeeeee 0,#f6f6f6 100%); box-shadow: 0 5px 10px rgba(246,246,246,.25);}
.btn-warm{ background-color: #2299dd; background: linear-gradient(to right,#2299dd 0,#45A9E2 100%); box-shadow: 0 5px 10px rgba(69,169,226,.25);}
.btn-primary{ background-color: #4fb1f7; background: linear-gradient(to right,#4fb1f7 0,#6bb8ee 100%); box-shadow: 0 5px 10px rgba(107,184,238,.25);}
.btn-danger{ background-color: #fc000c; background: linear-gradient(to right,#fc000c 0,#f9444d 100%); box-shadow: 0 5px 10px rgba(249,68,77,.25);}
.btn-info{ background-color: #5bc0de; background: linear-gradient(to right,#5bc0de 0,#7cc1d6 100%); box-shadow: 0 5px 10px rgba(124,193,214,.25);}
.btn-gray{ background-color: #282828; color: #ddd; background: linear-gradient(to right,#282828 0,#3b3b3b 100%); box-shadow: 0 5px 10px rgba(59,59,59,.25);}
.btn-warm,.btn-primary,.btn-danger,.btn-info{ color: #fff;}
.btn-warm:hover,.btn-primary:hover,.btn-danger:hover,.btn-info:hover,.btn-gray:hover{ color: #fff;}
.btn.disabled{ cursor: not-allowed; opacity: 0.6;}
/* border */
.border{ border-color: #eee;}
.border-primary{ border-color: #4fb1f7;}
.border-danger{ border-color: red;}
.border-info{ border-color: #5bc0de;}
/* line */
.spot{ border-color: #2299dd;}
.split-line{ background-color: #eee;}
.top-line:before,.bottom-line:after,.top-line-dot:before,.bottom-line-dot:before{ border-color: #eee;}
/* badge */
.badge{ background-color: #eee; color: #333;}
.badge-first{ background-color: #ff4a4a; color: #fff;}
.badge-second{ background-color: #ff7701; color: #fff;}
.badge-third{ background-color: #ffb400; color: #fff;}
/* dropdown */
.dropdown-box .item{ background-color: #fff; box-shadow: 0 2px 5px rgba(0,0,0,.1);}
/* pic-tag */
.pic-tag{ }
.pic-tag.active,.pic-tag-h{ background-color: #2299dd; color: #fff;}
.pic-text,.pic-title-bottom{ background-repeat: no-repeat; background-image: linear-gradient(transparent,rgba(0,0,0,.5)); color: #fff;}
.pic-text.active{ background: rgba(0,0,0,0.6); color: #fff;}
.pic-title-top{background: linear-gradient(to bottom, rgba(0,0,0,0.7) 0%,rgba(0,0,0,0) 100%); color: #fff;}
/* link */
.lvshicms-link__pic li img{ display: block; padding: 2px 6px; border-radius: 4px; background-color: #fff;}
/* nav */
.nav li.active a{ border-color: #2299dd; color: #2299dd;}
.nav-tabs li .dropdown-box .item li a{ color: #333;}
.nav-tabs li .dropdown-box .item li.active a{ color: #2299dd;}
/* panel */
.lvshicms-panel-bg,.lvshicms-panel-bg2{background-color: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.05);}
/* vodlist */
.lvshicms-vodlist__bg{background-color: #f5f5f5;}
.lvshicms-vodlist__bg:hover{ box-shadow: 0 3px 5px rgba(0,0,0,.08);}
/* text-list */
.lvshicms-vodlist__text.striped .striped-head,.lvshicms-vodlist__text.to-color li:nth-of-type(odd){ background-color: #f5f5f5;}
/* table */
.lvshicms-table>thead>tr>th,.lvshicms-table>tbody>tr>td, .lvshicms-table>tbody>tr>th, .lvshicms-table>tfoot>tr>td, .lvshicms-table>tfoot>tr>th, .lvshicms-table>thead>tr>td, .lvshicms-table>thead>tr>th { border-color: #ddd;}
/* playlist */
.lvshicms-content__list::-webkit-scrollbar,.lvshicms-playdown__list::-webkit-scrollbar{ width: 4px; background-color: #f5f5f5;}
.lvshicms-content__list::-webkit-scrollbar-thumb,.lvshicms-playdown__list::-webkit-scrollbar-thumb{background-color: #ccc;}
/* player */
.lvshicms-player__video{ background-color: #000;}
.lvshicms-player__operate > li > a{ color: #999;}
/* popup */
.popup{ background-color: #f8f8f8;}
.popup-head{ background-color: #fff;}
/* content */
.lvshicms-content__detail .score .rating li .fa,.lvshicms-content__detail .score .branch{ color: #2299dd;}
/* flickity */
.flickity-page-dots .dot{ background-color: #2299dd;}
/* carousel */
.carousel-indicators-dots li{ background-color: #2299dd;}
.carousel-indicators-text li.active .title{ color: red;}
.carousel-indicators-thumb li.active{ border: 3px solid #2299dd;}
/* extra */
.lvshicms-extra li a{ background-color: #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);}
.lvshicms-extra li a.backtop{ background-color: rgba(0,0,0,0.6); color: #fff; }
/* autocomplete */
.autocomplete-suggestions{ background-color: #fff; box-shadow: 0 2px 10px rgba(0,0,0,.05);}
.autocomplete-suggestion, .autocomplete-suggestions li,.autocomplete-suggestion, .autocomplete-suggestions li a{ color: #333;}
.autocomplete-suggestions li strong{ color: red;}
/* tabbar */
.lvshicms-nav__tabbar{background-color: #f8f8f8; border-color: #eee;}
.lvshicms-nav__tabbar .item .title{ color: #999;}
/* footer */
.lvshicms-foot{ background-color: #f8f8f8;}
/*head*/
.lvshicms-header__top,.lvshicms-header__top::before, .lvshicms-header__top::after,.lvshicms-header__logo .logo,.lvshicms-header__search,.lvshicms-header__user {
background-color: #fff;
}
.lvshicms-header__top {
box-shadow:0 1px 3px rgba(0,0,0,.05);
}
.lvshicms-header__menu > ul > li.active > a {
background-color:#2299dd;
color:#fff;
}
.lvshicms-header__search li.search-item{
border-color:#999;
}
.detail-info-box{
background-color: #fff;
box-shadow:0 1px 3px rgba(0,0,0,.05);
}
.lvshicms-content__thumb .lvshicms-vodlist__thumb {
box-shadow: 0 2px 6px rgba(200, 200, 200, .6);
}
.lvshicms-player__data{
background-color:#fff;
box-shadow:0 1px 3px rgba(0,0,0,.05);
}
.bread-crumbs {
/*background: linear-gradient(to right,#eeeeee 0,#f6f6f6 100%);*/
}
.detail-info-box .data a {
/*color: cornflowerblue;*/
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 978 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 917 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
MacPlayer.Html = '<iframe width="100%" height="100%" src="'+MacPlayer.Parse + MacPlayer.PlayUrl+'" frameborder="0" border="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="allowfullscreen" mozallowfullscreen="mozallowfullscreen" msallowfullscreen="msallowfullscreen" oallowfullscreen="oallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" security="restricted" sandbox="allow-same-origin allow-forms allow-scripts"></iframe>';
MacPlayer.Show();