可爱老人网

 找回密码
 注册会员
搜索
楼主: 肖燕

祝福祖国:《今天是你的生日》(朗诵+演唱)

[复制链接]
 楼主| 发表于 2025-9-30 14:30 | 显示全部楼层
武朝歌 发表于 2025-9-30 14:28
好作品,欣赏,学习了。赞!

谢谢老师的到访鼓励。祝全家双节快乐!
发表于 2025-9-30 14:39 | 显示全部楼层
本帖最后由 沧海笑 于 2025-9-30 14:40 编辑

定位视频代码:
发表于 2025-9-30 14:42 | 显示全部楼层
肖燕 发表于 2025-9-30 14:18
您简直太高评我了,哪有您说得那么好!不过我确实是很用心地去制作的这个视频。我观看了好几个《今天是你 ...
  1. <table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_2170059">
  2. <i class="pstatus">
  3. <div align="center"><font face="微软雅黑"><font size="6"><font color="Red"><strong>祝福祖国:《今天是你的生日》(朗诵+演唱)</font></font></font></div>  </strong>
  4. <div align="left"> <font face="微软雅黑"><font size="5"><font color="Red"><font face="楷体,楷体_GB2312"><font size="5"><strong><font color="Red"><font color="Navy"><font face="宋体"><strong><font color="Navy"><font size="6"><font face="新宋体"><font size="5"><strong><font color="Red">明天就是中华人民共和国76岁生日了。在这欢乐的日子里,我用朗诵加演唱的形式制作了视频《今天是你的生日》,以此祝福伟大的祖国繁荣昌盛,人民幸福安康。同时,也祝我们可爱老人网的所有网友国庆、中秋快乐!</font></strong></font></font></font></font></strong></font></font></font></strong></font></font>
  5. </font></font></font></div>

  6. <style>
  7. #papa { margin: 150px 0 20px calc(50% - 700px); background:#800 url(' ')no-repeat center/cover;width: 1250px; height: 960px;   box-shadow: 3px 3px 6px gray; overflow: hidden; z-index: 1; position: relative; display: grid; place-items: center; }

  8. #mdiv {z-index: 10;
  9.         --size: 0px;
  10.         --color: teal;
  11.         position: relative;
  12.         left: calc(-35% - var(--size) / 2);
  13.         top: 230px;
  14.         width: var(--size);
  15.         height: var(--size);
  16.         display: grid;
  17.         place-items: center;
  18.         animation: rot 8s linear infinite ;
  19.         cursor: pointer;
  20. }
  21. #mdiv::before, #mdiv::after {
  22.         position: absolute;
  23.         content: '';
  24.         width: 0;
  25.         height: 0;
  26.         border-style: solid;
  27.         border-width: calc(var(--size) / 2) calc(var(--size) / 2 - 35px);
  28.         border-color: var(--color) transparent;
  29.       
  30.         border-radius: 100% 100% 100% 100%;
  31.         filter:drop-shadow(#000 1px 0 0)drop-shadow(#000 0 1px 0)drop-shadow(#000 -1px 0 0) drop-shadow(#000 0 -1px  0);
  32. }
  33. #mdiv::after { transform: rotate(90deg) }
  34. @keyframes rot { 100% { transform: rotate(360deg);filter:hue-rotate(360deg); } }

  35. #vid {z-index: 2;
  36.         position: absolute;
  37.         width: 100%;
  38.         height: 100%;
  39.         object-fit: cover;
  40.         -webkit-mask-image: radial-gradient(black 10% ,transparent 90%);
  41. }
  42. #vido {z-index: 1;
  43.         position: absolute;
  44.         width: 100%;
  45.         height: 100%;
  46.         object-fit: cover;
  47.         }

  48. #fullscreen { position: absolute; top: 30px; right:30px;font: normal 2em/0em 楷体;color:#000; opacity: 1; cursor: pointer; z-index: 111}
  49. </style>
  50. <div id="papa">
  51. <div id="mdiv" title=""></div>
  52. <div data-lrc=" " id="lrc" title="歌词显示"> </div>   
  53. <span id="fullscreen">全屏欣赏</span>
  54. <audio id="aud" src="https://alimov2.a.kwimgs.com/upic/2025/09/28/11/BMjAyNTA5MjgxMTA3NTVfMTY5ODU5NjIyNl8xNzU5ODA2NjE5MjVfMl8z_b_B6fabb71b9b1801e1ac39632299eca552.mp4" autoplay loop></audio>
  55. <video id="vid" src="https://alimov2.a.kwimgs.com/upic/2025/09/28/11/BMjAyNTA5MjgxMTA3NTVfMTY5ODU5NjIyNl8xNzU5ODA2NjE5MjVfMl8z_b_B6fabb71b9b1801e1ac39632299eca552.mp4" autoplay loop muted></video>
  56. <video id="vido" src="https://alimov2.a.kwimgs.com/upic/2025/09/28/11/BMjAyNTA5MjgxMTA3NTVfMTY5ODU5NjIyNl8xNzU5ODA2NjE5MjVfMl8z_b_B6fabb71b9b1801e1ac39632299eca552.mp4" autoplay loop muted></video>
  57. </div>


  58.    
  59. <script>
  60. mdiv.onclick = () => aud.paused ?( aud.play(),vid.play(),vido.play()):(aud.pause(),vid.pause(),vido.pause());
  61. mdiv.style.animationPlayState = aud.paused ? 'paused' : 'running';
  62. aud.addEventListener('playing', () =>mdiv.style.animationPlayState = 'running');
  63. aud.addEventListener('pause', () =>mdiv.style.animationPlayState = 'paused');

  64. let fs = true;
  65.         fullscreen.onclick = () => {
  66.                 fs ? (fullscreen.innerText = '退出全屏', papa.requestFullscreen()) : (fullscreen.innerText = '全屏欣赏', document.exitFullscreen());
  67.                 fs = !fs;
  68.         };

  69. </script>

  70. <script >
  71. (function() {
  72. /*原始lrc歌词*/
  73. let lrcStr = `


  74. `;
  75. /*变量 :mKey - 当前歌词索引;mFlag :调用关键帧动画索引;averAdd :平均值补偿*/
  76. let mKey = 0, mFlag = true, averAdd = 0.3;
  77. /*函数 :获取每句歌词用时,歌词用时若超过平均值则取平均值,最后一句歌词则取平均值*/
  78. let lrcTime = (ar) => { let tmpAr = [];
  79. for(j = 0; j <ar.length - 1; j ++) { if(j !== ar.length - 1) tmpAr[j] = parseFloat((ar[j+1][0] - ar[j][0]).toFixed(1));}
  80. let aver = parseInt(tmpAr.reduce((a,b) => a + b) / (tmpAr.length - 1)) + averAdd;
  81. tmpAr.push(aver);
  82. tmpAr.forEach((item,key) => {ar[key][2] = item > aver ? aver : item; });
  83. return ar;};
  84. /*函数 :从原始lrc歌词获取信息并存入 n*3 数组*/
  85. let getLrcAr = (text) => {
  86.        let lrcAr = [];
  87.         let calcRule = [60,1,0.001];
  88.        for(x of text.split('\n')) {
  89.               let ar = [];
  90.                let re = /\d+[\.:]\d+([\.:]\d+)?/g;
  91.                let geci = x.replace(re,'');
  92.                if(geci) {
  93.                        geci = geci.replace(/[\[\]\'"\t,]s?/g,'');
  94.                         let time = x.match(re);
  95.                        if(time != null) {
  96.                                for(y of time) {
  97.                                         let tmp = y.match(/\d+/g);
  98.                                        let sec = 0;
  99.                                        for(z in tmp) sec += tmp[z] * calcRule[z];
  100.                                        ar[0] = [parseFloat(sec.toFixed(2)), geci];
  101.                                        lrcAr.push(ar[0]);
  102.                                 }
  103.                        }
  104.                 }
  105.         }
  106.         lrcAr.sort((a,b)=> a[0] - b[0]);
  107.         return(lrcTime(lrcAr));
  108. };
  109. /*函数 :模拟显示同步歌词*/
  110. let showLrc = (time) => {
  111.         let name = mFlag ? 'cover1' : 'cover2';
  112.        lrc.innerHTML = lrcAr[mKey][1];
  113.         lrc.dataset.lrc = lrcAr[mKey][1];
  114.         lrc.style.setProperty('--motion', name);
  115.         lrc.style.setProperty('--tt', time + 's');
  116.         lrc.style.setProperty('--state', 'running');
  117.         mKey += 1;
  118.        mFlag = !mFlag;
  119. };
  120. /*函数 :处理当前歌词索引 mKey*/
  121. let calcKey = () => {
  122.         for (j = 0; j < lrcAr.length; j++) {
  123.                 if (aud.currentTime <= lrcAr[j][0]) {
  124.                         mKey = j - 1;
  125.                         break;
  126.                }
  127.       }
  128.        if (mKey < 0) mKey = 0;
  129.         if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
  130.        let time = lrcAr[mKey][2] - (aud.currentTime - lrcAr[mKey][0]);
  131.         showLrc(time);
  132. };
  133. /*格式化时间信息*/
  134. let toMin = (val) => {
  135.       if (!val) return '00:00';
  136.       val = Math.floor(val);
  137.        let min = parseInt(val / 60),
  138.         sec = parseFloat(val % 60);
  139.        if (min < 10) min = '0' + min;
  140.         if (sec < 10) sec = '0' + sec;
  141.         return min + ':' + sec;
  142. }
  143. /*函数 :关键帧动画状态切换*/
  144. let mState = () => aud.paused ? (lrc.style.setProperty('--state','paused'),mdiv.style.animationPlayState = 'paused') : (lrc.style.setProperty('--state','running'),mdiv.style.animationPlayState = 'running');
  145. /*监听播放进度*/
  146. aud.addEventListener('timeupdate', () => {
  147.         for (j = 0; j < lrcAr.length; j++) {
  148.                 if (aud.currentTime >= lrcAr[j][0]) {
  149.                         cKey = j;
  150.                         if (mKey === j) showLrc(lrcAr[j][2]);
  151.          else continue;
  152.        }
  153.     }
  154. });
  155. aud.addEventListener('pause', () => mState());/*监听暂停事件*/
  156. aud.addEventListener('play', () => mState());/*监听播放事件*/
  157. aud.addEventListener('seeked', () => calcKey());/*监听查询事件*/
  158. let lrcAr = getLrcAr(lrcStr); /*获得歌词数组*/
  159. })();
  160. </script>

  161. </td></tr></table>
复制代码


发表于 2025-9-30 15:37 | 显示全部楼层
欣赏你的精彩制作!朗诵加演唱真棒!  
 楼主| 发表于 2025-9-30 16:18 | 显示全部楼层
沧浪愚翁 发表于 2025-9-30 15:37
欣赏你的精彩制作!朗诵加演唱真棒!

谢谢朋友的到访鼓励。祝您全家双节快乐!
发表于 2025-9-30 16:24 | 显示全部楼层
赞赏肖燕妹妹精彩声情并茂制作!朗诵的真棒!像标准的节目主持人!

衷心祝您:双节幸福快乐!



 楼主| 发表于 2025-9-30 16:34 | 显示全部楼层
红红的太阳 发表于 2025-9-30 16:24
赞赏肖燕妹妹精彩声情并茂制作!朗诵的真棒!像标准的节目主持人!
衷心祝您:双节幸福快乐!
{::gongxi: ...

谢谢姐姐的到访鼓励。祝您全家双节快乐!

点评

谢谢肖燕妹妹友爱互动!祝您:双节幸福快乐!  发表于 2025-10-1 15:07
发表于 2025-9-30 17:02 | 显示全部楼层
欣赏老师制作音画: 祝福祖国:《今天是你的生日》(朗诵+演唱)
 楼主| 发表于 2025-9-30 17:06 | 显示全部楼层
廖若晨星 发表于 2025-9-30 17:02
欣赏老师制作音画: 祝福祖国:《今天是你的生日》(朗诵+演唱)

谢谢老师的到访点评。祝您双节快乐!
发表于 2025-9-30 17:22 | 显示全部楼层
肖燕 发表于 2025-9-30 17:06
谢谢老师的到访点评。祝您双节快乐!

祝老师双节快乐
        
下一页 发布主题 快速回复

手机版|公众号|小黑屋|可爱老人网

GMT+8, 2025-10-14 07:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表