video-coloring-pages.ejs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  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. <script type="application/ld+json">
  365. {
  366. "@context": "https://schema.org",
  367. "@type": "VideoObject",
  368. "name": "Dog Riding an Electric Scooter - Video Story Coloring Page",
  369. "description": "Watch the real-life story of a dog riding an electric scooter that inspired our coloring page. Then, color it yourself!",
  370. "thumbnailUrl": "https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/vs-poster/320/67b2b23b9c09d12e648ea25a.webp",
  371. "uploadDate": "2025-01-17T08:00:00+08:00",
  372. "contentUrl": "https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8",
  373. "duration": "PT11S",
  374. "potentialAction": {
  375. "@type": "WatchAction",
  376. "target": {
  377. "@type": "EntryPoint",
  378. "url": "https://art.pcoloring.com/video-coloring-pages"
  379. }
  380. },
  381. "interactionStatistic": {
  382. "@type": "InteractionCounter",
  383. "interactionType": "https://schema.org/WatchAction",
  384. "userInteractionCount": 2353
  385. }
  386. }
  387. </script>
  388. <script type='text/javascript'
  389. src='https://platform-api.sharethis.com/js/sharethis.js#property=685036ce6c1ae8001abaded7&product=sop'
  390. async='async'></script>
  391. </head>
  392. <!-- Google tag (gtag.js) -->
  393. <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
  394. <script>
  395. window.dataLayer = window.dataLayer || [];
  396. function gtag() { dataLayer.push(arguments); }
  397. gtag('js', new Date());
  398. gtag('config', 'G-JBGGVGLHTP');
  399. </script>
  400. <body>
  401. <%- include('header') %>
  402. <div class="container">
  403. <div class="breadcrumb">
  404. <a href="/">Home</a> &gt; <a href="/coloring-pages">Coloring Pages</a> &gt; Video Coloring Pages
  405. </div>
  406. <h1 class="page-title">Video Story Coloring Pages: Transform vibrant video moments into one-of-a-kind coloring fun
  407. </h1>
  408. <div class="blog-content">
  409. <img src="/assets/coloring-pages/video-coloring-pages.webp" alt="Video Story Coloring Pages" class="blog-image">
  410. <p>Get ready for a coloring adventure that's truly one-of-a-kind! Here at Art Color, we're excited to unveil our
  411. exclusive collection of Video Story Coloring Pages. Our talented designers take delightful and engaging
  412. snippets from everyday life, capturing those special, fun moments in short videos – and then transform them
  413. into unique coloring page masterpieces!</p>
  414. <p>Witness the inspiration behind your next coloring project! See the playful antics, the charming scenes, the
  415. little moments of joy that sparked these original designs. It's a fresh and exciting way to connect with the
  416. art and bring these lively stories to life with your own colors. Explore our growing collection of
  417. <strong>Video Story Coloring Pages</strong> and discover the magic of coloring inspired by real-life fun! You
  418. won't find anything else like it!</p>
  419. <div class="content-container">
  420. <!-- 左侧视频播放器 -->
  421. <div class="video-player" id="storyVideo">
  422. <video
  423. poster="https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/vs-poster/320/67b2b23b9c09d12e648ea25a.webp"
  424. controls>
  425. <source
  426. src="https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8"
  427. type="application/x-mpegURL">
  428. Your browser does not support the video tag.
  429. </video>
  430. <div class="play-button"></div>
  431. </div>
  432. <!-- 右侧线稿图 -->
  433. <div class="lineart-container">
  434. <a href="/coloring-page/676be5cb86bb4d3392aac198"><img
  435. src="https://d2mb6s2cy1zg97.cloudfront.net/thumbs/coloring-page/page/640/676be5cb86bb4d3392aac198.webp"
  436. alt="Coloring Line Art"></a>
  437. <div class="lineart-overlay">
  438. <div class="lineart-title">Dog Riding an Electric Scooter</div>
  439. <div class="lineart-desc">Click to download or color online along with the video</div>
  440. </div>
  441. </div>
  442. </div>
  443. </div>
  444. <section>
  445. <h2>Video Stories</h2>
  446. <div class="coloring-grid">
  447. <% data.forEach(item=> { %>
  448. <div class="coloring-card">
  449. <div data-content-id="<%= item._id %>" class="coloring-image">
  450. <a href="javascript:;" onclick="onPlay(`<%= item.url %>`, `<%= item.jsonStr %>`)">
  451. <img src="<%= item.poster %>" alt="<%= item.seoTitle %>">
  452. <img src="/assets/svg/play-button.svg" , class="video-play-icon" width="20px" height="20px"
  453. alt="Coloring Page Video Play Button">
  454. </a>
  455. </div>
  456. </div>
  457. <% }); %>
  458. </div>
  459. </section>
  460. <section>
  461. <h2>The Heart Behind Our Video Stories: Capturing and Sharing Joy 💖</h2>
  462. <p>At Art Color, our <strong>Video Story Coloring Pages</strong> are born from a simple, yet profound idea: to
  463. <strong>discover and preserve the beautiful, fleeting moments of everyday life</strong>.
  464. We believe that true art lies not only in grand masterpieces but also in the small, heartwarming scenes that
  465. unfold around us daily. Our artists lovingly select these captivating video snippets,
  466. whether it's a playful pet, a stunning natural phenomenon, or a charming human interaction, and meticulously
  467. transform them into unique, colorable line art. It's our way of helping you pause, appreciate, and bring those
  468. wonderful moments to life with your own creative touch.
  469. <p>
  470. <h2>Share Your Spark! Got a Video Idea? 💡</h2>
  471. <p>Have you recently watched a captivating video on YouTube, TikTok, or any other social media platform that
  472. made you smile, wonder, or simply feel good? Do you think it would make an amazing coloring page? We'd love to
  473. see it!</p>
  474. <p>We invite you to share your favorite video clips with us. Our designers are always looking for new
  475. inspiration, and your suggestion might just be the next featured Video Story Coloring Page for our community!
  476. </p>
  477. <p><strong><a href="/contact">Contact us here to share your video ideas!</a></strong></p>
  478. </section>
  479. <section>
  480. <h2>More Free Coloring Fun</h2>
  481. <p>
  482. We hope these video story coloring pages bring you aesthetic joy! If you want more free coloring pages, feel
  483. free to browse the collections below.
  484. </p>
  485. <ul>
  486. <li><a href="/mandala-coloring-pages">Mandala Coloring Pages</a></li>
  487. <li><a href="/zentangle-coloring-pages">Zentangle Coloring Pages</a></li>
  488. </ul>
  489. <p>Or visit gallery to explore more coloring pages </p>
  490. <ul>
  491. <li><a href="/coloring-page-gallery">Coloring Page Gallery</a></li>
  492. </ul>
  493. <h2>Color With Us</h2>
  494. <p>Don’t forget to follow us on social media where we post updates about our latest coloring pages!</p>
  495. </section>
  496. <%- include('comment') %>
  497. </div>
  498. <!-- 弹出层 -->
  499. <div id="video-popup" class="popup">
  500. <div class="popup-content-wrapper">
  501. <span class="close" onclick="closeVideoPopup()">&times;</span>
  502. <div class="popup-content-left">
  503. <video id="video-player" controls></video>
  504. </div>
  505. <div id="video-content" class="popup-content-right">
  506. </div>
  507. </div>
  508. </div>
  509. <%- include('footer') %>
  510. <script src="/scripts/script.js"></script>
  511. <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
  512. <script>
  513. const storyVideo = document.getElementById('storyVideo');
  514. const video = storyVideo.querySelector('video');
  515. const playButton = storyVideo.querySelector('.play-button');
  516. // 视频播放控制
  517. if (Hls.isSupported()) {
  518. var hls = new Hls();
  519. var url = 'https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8';
  520. hls.loadSource(url);
  521. hls.attachMedia(video);
  522. } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
  523. // Safari 不支持 hls.js 但原生支持 HLS
  524. video.src = 'https://d1tdr4l5yr56j4.cloudfront.net/%E7%8B%97%E9%AA%91%E7%94%B5%E5%8A%A8%E8%BD%A602-story.m3u8';
  525. } else {
  526. // 浏览器不支持 HLS
  527. console.error('Your browser does not support HLS.');
  528. }
  529. playButton.addEventListener('click', () => {
  530. video.play();
  531. playButton.style.display = 'none';
  532. });
  533. // 视频播放时隐藏play button
  534. video.addEventListener('play', () => {
  535. playButton.style.display = 'none';
  536. });
  537. // 视频暂停时显示播放按钮
  538. video.addEventListener('pause', () => {
  539. playButton.style.display = 'flex';
  540. });
  541. // 视频结束时显示播放按钮
  542. video.addEventListener('ended', () => {
  543. playButton.style.display = 'flex';
  544. });
  545. </script>
  546. <script>
  547. function onPlay(url, videoJson) {
  548. // alert(url);
  549. // return;
  550. console.log(url);
  551. console.log(videoJson);
  552. var video = JSON.parse(`${videoJson}`);
  553. generateVideoContent(video);
  554. var videoPopup = document.getElementById('video-popup');
  555. var videoPlayer = document.getElementById('video-player');
  556. videoPopup.style.display = 'block';
  557. if (Hls.isSupported()) {
  558. var hls = new Hls();
  559. hls.loadSource(url);
  560. hls.attachMedia(videoPlayer);
  561. hls.on(Hls.Events.MANIFEST_PARSED, function () {
  562. videoPlayer.play();
  563. });
  564. } else if (videoPlayer.canPlayType('application/vnd.apple.mpegurl')) {
  565. videoPlayer.src = url;
  566. videoPlayer.addEventListener('canplay', function () {
  567. videoPlayer.play();
  568. });
  569. }
  570. window.closeVideoPopup = function () {
  571. videoPopup.style.display = 'none';
  572. videoPlayer.pause(); // 停止视频播放
  573. videoPlayer.src = ''; // 重置视频源,避免浏览器缓存问题
  574. };
  575. // 点击模态对话框外部时关闭对话框(可选,但推荐添加)
  576. videoPopup.addEventListener('click', function (event) {
  577. if (event.target === videoPopup) {
  578. closeVideoPopup();
  579. }
  580. });
  581. // 防止点击关闭按钮时事件冒泡到弹出层导致关闭(因为我们已经为关闭按钮单独绑定了事件)
  582. var closeButton = document.querySelector('.close');
  583. if (closeButton) {
  584. closeButton.addEventListener('click', function (event) {
  585. event.stopPropagation();
  586. });
  587. }
  588. }
  589. function generateVideoContent(video) {
  590. var div = document.getElementById('video-content');
  591. div.innerHTML = `
  592. <h3>${video.seoTitle}</h3>
  593. `;
  594. var contentHTML = '<div>';
  595. video.contents.forEach(item => {
  596. contentHTML += `
  597. <div class="coloring-card">
  598. <div data-content-id="${item._id}" class="coloring-image">
  599. <a href=${item.uri}><img src=${item.thumb} alt='${item.title}'></a>
  600. </div>
  601. <div class="coloring-content">
  602. <div class="coloring-title">${item.title}</div>
  603. </div>
  604. </div>
  605. `
  606. });
  607. contentHTML += '</div>';
  608. div.innerHTML += contentHTML;
  609. }
  610. </script>
  611. </body>
  612. </html>