video-coloring-pages.ejs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta name="description"
  7. content="Watch fascinating videos and turn them into beautiful coloring pages. Each video captures moments that our artists transform into detailed coloring designs.">
  8. <link rel="icon" href="/assets/icon/favicon.ico" type="image/x-icon">
  9. <title>Video Story Coloring Pages - Art Color</title>
  10. <link rel="stylesheet" href="/stylesheets/v2/styles.css">
  11. <style>
  12. :root {
  13. --online-color: #7b68ee;
  14. /* 在线填色功能专属色 */
  15. }
  16. h3 {
  17. color: var(--text-color);
  18. }
  19. ul {
  20. padding: 20px;
  21. }
  22. ul li {
  23. padding: 10px;
  24. }
  25. li a {
  26. font-size: 1.2rem;
  27. color: var(--secondary-color)
  28. }
  29. .page-title {
  30. color: var(--primary-color);
  31. font-size: 2.2rem;
  32. margin: 40px 0 20px;
  33. text-align: center;
  34. }
  35. .blog-content {
  36. background-color: white;
  37. border-radius: 10px;
  38. box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08);
  39. padding: 40px;
  40. margin-bottom: 60px;
  41. }
  42. .blog-meta {
  43. color: var(--light-text);
  44. font-size: 0.9rem;
  45. margin-bottom: 20px;
  46. text-align: center;
  47. }
  48. .blog-meta span {
  49. margin: 0 10px;
  50. }
  51. .blog-image {
  52. width: 100%;
  53. max-height: 400px;
  54. object-fit: cover;
  55. border-radius: 10px;
  56. margin-bottom: 30px;
  57. }
  58. .blog-content h2 {
  59. color: var(--primary-color);
  60. font-size: 1.7rem;
  61. margin: 30px 0 15px;
  62. }
  63. .blog-content p {
  64. margin-bottom: 20px;
  65. line-height: 1.7;
  66. }
  67. .blog-content ul {
  68. margin: 20px 0;
  69. padding-left: 40px;
  70. }
  71. .blog-content li {
  72. margin-bottom: 10px;
  73. }
  74. .content-container {
  75. display: grid;
  76. grid-template-columns: 1fr 1fr;
  77. gap: 30px;
  78. margin-bottom: 10px;
  79. }
  80. /* 视频播放器样式 */
  81. .video-player {
  82. position: relative;
  83. background-color: #000;
  84. border-radius: 8px;
  85. overflow: hidden;
  86. cursor: pointer;
  87. aspect-ratio: 1/1;
  88. /* 修改为1:1比例 */
  89. }
  90. .video-player video {
  91. width: 100%;
  92. height: 100%;
  93. object-fit: cover;
  94. display: block;
  95. }
  96. .play-button {
  97. position: absolute;
  98. top: 50%;
  99. left: 50%;
  100. transform: translate(-50%, -50%);
  101. width: 80px;
  102. height: 80px;
  103. background-color: rgba(255, 107, 107, 0.8);
  104. border-radius: 50%;
  105. display: flex;
  106. align-items: center;
  107. justify-content: center;
  108. transition: all 0.3s ease;
  109. }
  110. .play-button:hover {
  111. background-color: rgba(255, 107, 107, 1);
  112. transform: translate(-50%, -50%) scale(1.1);
  113. }
  114. .play-button::after {
  115. content: "";
  116. width: 0;
  117. height: 0;
  118. border-top: 15px solid transparent;
  119. border-bottom: 15px solid transparent;
  120. border-left: 25px solid white;
  121. margin-left: 5px;
  122. }
  123. /* 线稿图样式 */
  124. .lineart-container {
  125. position: relative;
  126. border-radius: 8px;
  127. overflow: hidden;
  128. aspect-ratio: 1/1;
  129. /* 修改为1:1比例 */
  130. background-color: #f5f5f5;
  131. }
  132. .lineart-container img {
  133. width: 100%;
  134. height: 100%;
  135. object-fit: contain;
  136. /* 使用contain保持图像比例 */
  137. padding: 15px;
  138. /* 添加内边距,使图像不贴边 */
  139. }
  140. /* 线稿图悬停效果 */
  141. .lineart-overlay {
  142. position: absolute;
  143. bottom: 0;
  144. left: 0;
  145. right: 0;
  146. background: linear-gradient(to top, rgba(0, 0, 0, 0.7), transparent);
  147. padding: 15px;
  148. color: white;
  149. opacity: 0;
  150. transition: opacity 0.3s ease;
  151. }
  152. .lineart-container:hover .lineart-overlay {
  153. opacity: 1;
  154. }
  155. .lineart-title {
  156. font-weight: 600;
  157. margin-bottom: 5px;
  158. }
  159. .lineart-desc {
  160. font-size: 0.9rem;
  161. opacity: 0.9;
  162. }
  163. .video-play-icon {
  164. width: 20px !important;
  165. height: 20px !important;
  166. ;
  167. position: absolute;
  168. top: 10px;
  169. right: 10px;
  170. }
  171. /*弹出框样式*/
  172. .popup {
  173. display: none;
  174. /* 默认隐藏 */
  175. position: fixed;
  176. z-index: 11000;
  177. left: 0;
  178. top: 0;
  179. width: 100%;
  180. height: 100%;
  181. overflow: auto;
  182. background-color: rgba(0, 0, 0, 0.3);
  183. }
  184. .popup-content-wrapper {
  185. box-sizing: border-box;
  186. height: 90vh;
  187. width: auto;
  188. aspect-ratio: 18/16;
  189. margin: 5vh auto;
  190. display: flex;
  191. flex-direction: row;
  192. justify-content: center;
  193. position: relative;
  194. }
  195. .popup-content-left {
  196. background-color: #000;
  197. height: 90vh;
  198. width: auto;
  199. aspect-ratio: 9/16;
  200. border-top-left-radius: 8px;
  201. border-bottom-left-radius: 8px;
  202. }
  203. .popup-content-right {
  204. box-sizing: border-box;
  205. padding: 20px;
  206. background-color: white;
  207. width: auto;
  208. height: 90vh;
  209. max-width: 480px;
  210. max-height: 90vh;
  211. aspect-ratio: 9/16;
  212. overflow: auto;
  213. border-top-right-radius: 8px;
  214. /* 卡片圆角 */
  215. border-bottom-right-radius: 8px;
  216. }
  217. .close {
  218. color: #aaa;
  219. position: absolute;
  220. top: 10px;
  221. right: 10px;
  222. font-size: 28px;
  223. font-weight: bold;
  224. cursor: pointer;
  225. z-index: 1000;
  226. }
  227. .close:hover,
  228. .close:focus {
  229. color: white;
  230. text-decoration: none;
  231. }
  232. #video-player {
  233. box-sizing: border-box;
  234. height: 100%;
  235. width: 100%;
  236. }
  237. /* 响应式设计, 如果是手机屏幕 */
  238. @media (max-width: 768px) {
  239. .popup-content-wrapper {
  240. flex-direction: column;
  241. width: 100%;
  242. height: auto;
  243. margin: 0 auto;
  244. aspect-ratio: null;
  245. }
  246. .popup-content-left {
  247. width: 100%;
  248. height: 80vh;
  249. }
  250. .popup-content-right {
  251. width: 100%;
  252. max-width: 100%;
  253. height: auto;
  254. }
  255. }
  256. .cta-box {
  257. background-color: var(--background-color);
  258. border-radius: 10px;
  259. padding: 30px;
  260. margin: 40px 0;
  261. text-align: center;
  262. }
  263. .cta-box h3 {
  264. color: var(--secondary-color);
  265. font-size: 1.5rem;
  266. margin-bottom: 15px;
  267. }
  268. .cta-btn {
  269. display: inline-block;
  270. background-color: var(--primary-color);
  271. color: white;
  272. padding: 12px 30px;
  273. border-radius: 30px;
  274. text-decoration: none;
  275. font-weight: 600;
  276. transition: all 0.3s ease;
  277. margin: 15px 10px 0;
  278. }
  279. .cta-btn:hover {
  280. background-color: var(--secondary-color);
  281. }
  282. .related-collections {
  283. margin-top: 60px;
  284. }
  285. .related-collections h3 {
  286. color: var(--secondary-color);
  287. font-size: 1.5rem;
  288. margin-bottom: 25px;
  289. }
  290. .collection-grid {
  291. display: grid;
  292. grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  293. gap: 25px;
  294. }
  295. .collection-card {
  296. background-color: white;
  297. border-radius: 10px;
  298. overflow: hidden;
  299. box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08);
  300. transition: transform 0.3s ease;
  301. text-decoration: none;
  302. display: block;
  303. }
  304. .collection-card:hover {
  305. transform: translateY(-8px);
  306. }
  307. .collection-image {
  308. height: 180px;
  309. background-color: #f0f0f0;
  310. overflow: hidden;
  311. }
  312. .collection-image img {
  313. width: 100%;
  314. height: 100%;
  315. object-fit: cover;
  316. transition: transform 0.5s ease;
  317. }
  318. .collection-card:hover .collection-image img {
  319. transform: scale(1.05);
  320. }
  321. .collection-info {
  322. padding: 18px;
  323. }
  324. .collection-title {
  325. font-weight: 700;
  326. font-size: 1.2rem;
  327. margin-bottom: 10px;
  328. color: var(--primary-color);
  329. }
  330. .collection-desc {
  331. color: var(--light-text);
  332. font-size: 0.9rem;
  333. line-height: 1.4;
  334. display: -webkit-box;
  335. -webkit-line-clamp: 3;
  336. -webkit-box-orient: vertical;
  337. overflow: hidden;
  338. }
  339. @media (max-width: 768px) {
  340. .page-title {
  341. font-size: 1.8rem;
  342. }
  343. .blog-content {
  344. padding: 25px;
  345. }
  346. .blog-content h2 {
  347. font-size: 1.5rem;
  348. }
  349. .cta-box {
  350. padding: 25px;
  351. }
  352. .cta-box h3 {
  353. font-size: 1.3rem;
  354. }
  355. .collection-grid {
  356. grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  357. gap: 20px;
  358. }
  359. .content-container {
  360. grid-template-columns: 1fr;
  361. }
  362. }
  363. </style>
  364. <% data.forEach(function(item) { %>
  365. <script type="application/ld+json">
  366. {
  367. "@context": "https://schema.org",
  368. "@type": "VideoObject",
  369. "name": "<%- item.seoTitle %>",
  370. "description": "<%- item.seoDescription %>",
  371. "thumbnailUrl": "<%= item.poster %>",
  372. "uploadDate": "<%= new Date(item.timeCreate).toISOString() %>",
  373. "contentUrl": "<%= item.url %>",
  374. "url": "https://art.pcoloring.com/video-coloring-pages/<%= item._id %>",
  375. "potentialAction": {
  376. "@type": "WatchAction",
  377. "target": {
  378. "@type": "EntryPoint",
  379. "url": "https://art.pcoloring.com/video-coloring-pages/<%= item._id %>"
  380. }
  381. }
  382. }
  383. </script>
  384. <% }); %>
  385. <script type='text/javascript'
  386. src='https://platform-api.sharethis.com/js/sharethis.js#property=685036ce6c1ae8001abaded7&product=sop'
  387. async='async'></script>
  388. </head>
  389. <!-- Google tag (gtag.js) -->
  390. <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
  391. <script>
  392. window.dataLayer = window.dataLayer || [];
  393. function gtag() { dataLayer.push(arguments); }
  394. gtag('js', new Date());
  395. gtag('config', 'G-JBGGVGLHTP');
  396. </script>
  397. <body>
  398. <%- include('header') %>
  399. <div class="container">
  400. <div class="breadcrumb">
  401. <a href="/">Home</a> &gt; <a href="/coloring-pages">Coloring Pages</a> &gt; Video Coloring Pages
  402. </div>
  403. <h1 class="page-title">Video Story Coloring Pages: Transform vibrant video moments into one-of-a-kind coloring fun
  404. </h1>
  405. <div class="blog-content">
  406. <img src="/assets/coloring-pages/video-coloring-pages.webp" alt="Video Story Coloring Pages" class="blog-image">
  407. <p>Get ready for a coloring adventure that's truly one-of-a-kind! Here at Art Color, we're excited to unveil our
  408. exclusive collection of Video Story Coloring Pages. Our talented designers take delightful and engaging
  409. snippets from everyday life, capturing those special, fun moments in short videos – and then transform them
  410. into unique coloring page masterpieces!</p>
  411. <p>Witness the inspiration behind your next coloring project! See the playful antics, the charming scenes, the
  412. little moments of joy that sparked these original designs. It's a fresh and exciting way to connect with the
  413. art and bring these lively stories to life with your own colors. Explore our growing collection of
  414. <strong>Video Story Coloring Pages</strong> and discover the magic of coloring inspired by real-life fun! You
  415. won't find anything else like it!</p>
  416. <div class="content-container">
  417. <!-- 左侧视频播放器 -->
  418. <div class="video-player" id="storyVideo">
  419. <video
  420. poster="https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/vs-poster/320/67b2b23b9c09d12e648ea25a.webp"
  421. controls>
  422. <source
  423. src="https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8"
  424. type="application/x-mpegURL">
  425. Your browser does not support the video tag.
  426. </video>
  427. <div class="play-button"></div>
  428. </div>
  429. <!-- 右侧线稿图 -->
  430. <div class="lineart-container">
  431. <a href="/coloring-page/676be5cb86bb4d3392aac198"><img
  432. src="https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/page/640/676be5cb86bb4d3392aac198.webp"
  433. alt="Coloring Line Art"></a>
  434. <div class="lineart-overlay">
  435. <div class="lineart-title">Dog Riding an Electric Scooter</div>
  436. <div class="lineart-desc">Click to download or color online along with the video</div>
  437. </div>
  438. </div>
  439. </div>
  440. </div>
  441. <section>
  442. <h2>Video Stories</h2>
  443. <div class="coloring-grid">
  444. <% data.forEach(item=> { %>
  445. <div class="coloring-card">
  446. <div data-content-id="<%= item._id %>" class="coloring-image">
  447. <a href="/video-coloring-pages/<%= item._id %>" onclick="event.preventDefault(); onPlay(`<%= item.url %>`, `<%= item.jsonStr %>`)">
  448. <img src="<%= item.poster %>" alt="<%= item.seoTitle %>">
  449. <img src="/assets/svg/play-button.svg" class="video-play-icon" width="20px" height="20px"
  450. alt="Coloring Page Video Play Button">
  451. </a>
  452. </div>
  453. </div>
  454. <% }); %>
  455. </div>
  456. </section>
  457. <section>
  458. <h2>The Heart Behind Our Video Stories: Capturing and Sharing Joy 💖</h2>
  459. <p>At Art Color, our <strong>Video Story Coloring Pages</strong> are born from a simple, yet profound idea: to
  460. <strong>discover and preserve the beautiful, fleeting moments of everyday life</strong>.
  461. We believe that true art lies not only in grand masterpieces but also in the small, heartwarming scenes that
  462. unfold around us daily. Our artists lovingly select these captivating video snippets,
  463. whether it's a playful pet, a stunning natural phenomenon, or a charming human interaction, and meticulously
  464. transform them into unique, colorable line art. It's our way of helping you pause, appreciate, and bring those
  465. wonderful moments to life with your own creative touch.
  466. <p>
  467. <h2>Share Your Spark! Got a Video Idea? 💡</h2>
  468. <p>Have you recently watched a captivating video on YouTube, TikTok, or any other social media platform that
  469. made you smile, wonder, or simply feel good? Do you think it would make an amazing coloring page? We'd love to
  470. see it!</p>
  471. <p>We invite you to share your favorite video clips with us. Our designers are always looking for new
  472. inspiration, and your suggestion might just be the next featured Video Story Coloring Page for our community!
  473. </p>
  474. <p><strong><a href="/contact">Contact us here to share your video ideas!</a></strong></p>
  475. </section>
  476. <section>
  477. <h2>More Free Coloring Fun</h2>
  478. <p>
  479. We hope these video story coloring pages bring you aesthetic joy! If you want more free coloring pages, feel
  480. free to browse the collections below.
  481. </p>
  482. <ul>
  483. <li><a href="/mandala-coloring-pages">Mandala Coloring Pages</a></li>
  484. <li><a href="/zentangle-coloring-pages">Zentangle Coloring Pages</a></li>
  485. </ul>
  486. <p>Or visit gallery to explore more coloring pages </p>
  487. <ul>
  488. <li><a href="/coloring-page-gallery">Coloring Page Gallery</a></li>
  489. </ul>
  490. <h2>Color With Us</h2>
  491. <p>Don’t forget to follow us on social media where we post updates about our latest coloring pages!</p>
  492. </section>
  493. <%- include('comment') %>
  494. </div>
  495. <!-- 弹出层 -->
  496. <div id="video-popup" class="popup">
  497. <div class="popup-content-wrapper">
  498. <span class="close" onclick="closeVideoPopup()">&times;</span>
  499. <div class="popup-content-left">
  500. <video id="video-player" controls></video>
  501. </div>
  502. <div id="video-content" class="popup-content-right">
  503. </div>
  504. </div>
  505. </div>
  506. <%- include('footer') %>
  507. <script src="/scripts/script.js"></script>
  508. <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
  509. <script>
  510. const storyVideo = document.getElementById('storyVideo');
  511. const video = storyVideo.querySelector('video');
  512. const playButton = storyVideo.querySelector('.play-button');
  513. // 视频播放控制
  514. if (Hls.isSupported()) {
  515. var hls = new Hls();
  516. var url = 'https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8';
  517. hls.loadSource(url);
  518. hls.attachMedia(video);
  519. } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
  520. // Safari 不支持 hls.js 但原生支持 HLS
  521. video.src = 'https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8';
  522. } else {
  523. // 浏览器不支持 HLS
  524. console.error('Your browser does not support HLS.');
  525. }
  526. playButton.addEventListener('click', () => {
  527. video.play();
  528. playButton.style.display = 'none';
  529. });
  530. // 视频播放时隐藏play button
  531. video.addEventListener('play', () => {
  532. playButton.style.display = 'none';
  533. });
  534. // 视频暂停时显示播放按钮
  535. video.addEventListener('pause', () => {
  536. playButton.style.display = 'flex';
  537. });
  538. // 视频结束时显示播放按钮
  539. video.addEventListener('ended', () => {
  540. playButton.style.display = 'flex';
  541. });
  542. </script>
  543. <script>
  544. function onPlay(url, videoJson) {
  545. // alert(url);
  546. // return;
  547. console.log(url);
  548. console.log(videoJson);
  549. var video = JSON.parse(`${videoJson}`);
  550. generateVideoContent(video);
  551. var videoPopup = document.getElementById('video-popup');
  552. var videoPlayer = document.getElementById('video-player');
  553. videoPopup.style.display = 'block';
  554. if (Hls.isSupported()) {
  555. var hls = new Hls();
  556. hls.loadSource(url);
  557. hls.attachMedia(videoPlayer);
  558. hls.on(Hls.Events.MANIFEST_PARSED, function () {
  559. videoPlayer.play();
  560. });
  561. } else if (videoPlayer.canPlayType('application/vnd.apple.mpegurl')) {
  562. videoPlayer.src = url;
  563. videoPlayer.addEventListener('canplay', function () {
  564. videoPlayer.play();
  565. });
  566. }
  567. window.closeVideoPopup = function () {
  568. videoPopup.style.display = 'none';
  569. videoPlayer.pause(); // 停止视频播放
  570. videoPlayer.src = ''; // 重置视频源,避免浏览器缓存问题
  571. };
  572. // 点击模态对话框外部时关闭对话框(可选,但推荐添加)
  573. videoPopup.addEventListener('click', function (event) {
  574. if (event.target === videoPopup) {
  575. closeVideoPopup();
  576. }
  577. });
  578. // 防止点击关闭按钮时事件冒泡到弹出层导致关闭(因为我们已经为关闭按钮单独绑定了事件)
  579. var closeButton = document.querySelector('.close');
  580. if (closeButton) {
  581. closeButton.addEventListener('click', function (event) {
  582. event.stopPropagation();
  583. });
  584. }
  585. }
  586. function generateVideoContent(video) {
  587. var div = document.getElementById('video-content');
  588. div.innerHTML = `
  589. <h3>${video.seoTitle}</h3>
  590. `;
  591. var contentHTML = '<div>';
  592. video.contents.forEach(item => {
  593. contentHTML += `
  594. <div class="coloring-card">
  595. <div data-content-id="${item._id}" class="coloring-image">
  596. <a href=${item.uri}><img src=${item.thumb} alt='${item.title}'></a>
  597. </div>
  598. <div class="coloring-content">
  599. <div class="coloring-title">${item.title}</div>
  600. </div>
  601. </div>
  602. `
  603. });
  604. contentHTML += '</div>';
  605. div.innerHTML += contentHTML;
  606. }
  607. </script>
  608. </body>
  609. </html>