找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

你别哭 你别哭

[复制链接]

313

主题

1万

回帖

7万

积分

超级版主

积分
74632
发表于 2024-10-22 06:57:45 | 显示全部楼层 IP:亚太地区
亚伦影音工作室 发表于 2024-10-21 22:34
论坛里面老钟的图片可以移动!

          我制作的也可以移动,但就是没有同步歌词。

49

主题

1万

回帖

4万

积分

版主

积分
45094
发表于 2024-10-22 08:19:47 | 显示全部楼层 IP:陕西
图片不动,也没有歌词的显示。

118

主题

6044

回帖

2万

积分

蓬莱仙人

积分
26284
发表于 2024-10-22 09:03:59 | 显示全部楼层 IP:河北
歌曲很美。

259

主题

1万

回帖

6万

积分

超级版主

积分
65850
发表于 2024-10-22 09:25:44 | 显示全部楼层 IP:河北廊坊
对这种情况不甚了解。

313

主题

1万

回帖

7万

积分

超级版主

积分
74632
发表于 2024-10-22 11:09:16 | 显示全部楼层 IP:亚太地区
        欣赏老师的精美音画,老师厉害,图动了,歌词也显示了,向老师学习!

314

主题

6442

回帖

3万

积分

版主

积分
36738
发表于 2024-10-22 11:13:37 | 显示全部楼层 IP:辽宁
欣赏老师精彩的音画佳作,点赞支持,中午好!

314

主题

6442

回帖

3万

积分

版主

积分
36738
发表于 2024-10-22 11:16:08 | 显示全部楼层 IP:辽宁
  1. <div style="width: 100%;height: 1050px;position: absolute;MARGIN-LEFT:-210px;MARGIN-top:86px;">
  2. <style>#papa{
  3.         position: relative;
  4.         width: 1164px;
  5.         height: 640px;
  6.         margin-left:20px;
  7.         margin-top:10px;
  8.         border: 0px solid rgba(36, 201, 219,.95);
  9.         border-radius: 0px;
  10.         background:#000 url(https://pic.imgdb.cn/item/66135afc68eb9357135ffd24.jpg)no-repeat center/cover;
  11.         overflow: hidden;
  12. }
  13. .img-container {
  14.   position:absolute;z-index: 1;
  15.   height: 700px;
  16.   width: 800px;
  17.   perspective: 500px;left:250px;
  18.   transform-style: preserve-3d;
  19. }
  20. .box {      
  21. width: 620px;
  22. height: 400px;
  23.   border-radius: 0px;
  24.   overflow: hidden;
  25.   border: 3px solid #ccc;
  26.   position: absolute;
  27.   top: 40%;
  28.   transition: 800ms ease-in-out;
  29. }

  30. .box img {
  31.   width: 100%;
  32.   height: 100%;
  33. }

  34. .box:first-of-type {
  35.   z-index: 1;
  36.   opacity: 0;
  37.   left: 15%;
  38.   transform: translate(-100%, -100%) rotateY(50deg);
  39. }

  40. .box:nth-of-type(2) {
  41.   opacity: 1;
  42.   left: 20%;
  43.   transform: translate(-50%, -50%) rotateY(-10deg);
  44.   z-index: 1;
  45. }

  46. .box:nth-of-type(3) {
  47.   left: 25%;
  48.   opacity: 0.90;
  49.   color: #eee;
  50.   z-index: 10;
  51.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-40px);
  52. }
  53. .box:nth-of-type(4) {
  54.   z-index: 8;
  55.   opacity: 0.80;
  56.   left:30%;
  57.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-80px);
  58. }

  59. .box:nth-of-type(5) {
  60.   z-index: 7;
  61.   opacity: 0.70;
  62.   left: 35%;
  63.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-120px);
  64. }

  65. .box:nth-of-type(6) {
  66.   z-index: 6;
  67.   opacity: 0.6;
  68.   left: 40%;
  69.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-160px);
  70. }

  71. .box:nth-of-type(7) {
  72.   z-index: 5;
  73.   opacity: 0.5;
  74.   left: 45%;
  75.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-200px);
  76. }
  77. .box:nth-of-type(8) {
  78.   z-index: 4;
  79.   opacity: 0.4;
  80.   left: 50%;
  81.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-240px);
  82. }
  83. .box:nth-of-type(9) {
  84.   z-index: 3;
  85.   opacity: 0.3;
  86.   left: 55%;
  87.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-280px);
  88. }
  89. .box:nth-of-type(10) {
  90.   z-index: 2;
  91.   opacity: 0;
  92.   left: 60%;
  93.   transform: translate(-50%, -50%) rotateY(-10deg) translateZ(-320px);
  94. }
  95. #mplayer {top:12%; left:5%;cursor: pointer;
  96.         width:200px;text-align:center;animation:rot 10s linear infinite;
  97.         position: absolute;filter:drop-shadow(#000 0px 0 1px);
  98.         z-index: 40;
  99.         }
  100. @keyframes rot { to { transform: rotate(2turn);} }
  101. </style>
  102. <div id="papa">
  103. <div class="img-container">
  104.       <div class="box">
  105.         <img src="https://pic.imgdb.cn/item/66fb8410f21886ccc0a62100.webp" alt="">
  106.       </div>
  107.       <div class="box">
  108.          <img src="https://pic.imgdb.cn/item/65db13539f345e8d03a32d0b.jpg" alt="">
  109.       </div>
  110.       <div class="box">
  111.         <img src="https://pic.imgdb.cn/item/6673e409d9c307b7e9a64805.webp" alt="">
  112.       </div>
  113.       <div class="box">
  114.          <img src="https://pic.imgdb.cn/item/666909c4d9c307b7e9e71bad.jpg" alt="">
  115.       </div>
  116.       <div class="box">
  117.          <img src="https://pic.imgdb.cn/item/65db15629f345e8d03a78591.jpg" alt="">
  118.       </div>
  119.       <div class="box">
  120.         <img src="https://pic.imgdb.cn/item/65db15639f345e8d03a787ea.jpg" alt="">
  121.       </div>

  122. <div class="box">
  123.          <img src="https://pic.imgdb.cn/item/66fb8420f21886ccc0a62fe3.webp" alt="">
  124.       </div>
  125. <div class="box">
  126.          <img src="https://pic.imgdb.cn/item/66fb8419f21886ccc0a628e0.webp" alt="">
  127.       </div>
  128. <div class="box">
  129.          <img src="https://pic.imgdb.cn/item/6673e4b9d9c307b7e9a78f68.webp" alt="">
  130.       </div>
  131. <div class="box">
  132.          <img src="https://pic.imgdb.cn/item/6673e506d9c307b7e9a816af.webp" alt="">
  133.       </div>
  134. </div>   
  135. <div id="mplayer" > <svg width="100" height="100" viewBox="-160 -160 320 320">
  136.         <defs>
  137.                 <filter id="shadow">
  138.                         <feDropShadow dx="0" dy="0" stdDeviation="1" flood-color="black"></feDropShadow>
  139.                 </filter>
  140.                 <g id="part" filter="url(#shadow)">
  141.                         <line x1="0" y1="-100" x2="0" y2="100" stroke="#880" stroke-width="4"></line>
  142.                         <ellipse cx="0" cy="-125" rx="20" ry="20" fill="#fff"></ellipse>
  143.                         <ellipse cx="0" cy="125" rx="20" ry="20" fill="#fff"></ellipse>
  144.                 </g>
  145.         </defs>
  146.         <use href="#part"></use>
  147.         <use href="#part" transform="rotate(35)"></use>
  148.         <use href="#part" transform="rotate(70)"></use>
  149.         <use href="#part" transform="rotate(105)"></use>
  150.         <use href="#part" transform="rotate(140)"></use>
  151. </svg></div>
  152. <div data-lrc="亚伦影音工作室" id="lrc">亚伦影音工作室</div>
  153. <audio id="aud" src="https://s2.ananas.chaoxing.com/sv-w7/audio/b5/0f/de/6615a1eb78f58c680fc5ea73f913e316/audio.mp3" autoplay="" loop="loop"></audio>
  154. </div>

  155.   <style type="text/css">
  156. #lrc {
  157.         --state: paused;
  158.         --motion: cover2;
  159.         --tt: 2s;
  160.         --bg:  #880000;
  161.         position: absolute;z-index: 4;
  162.         left: 50%;
  163.         transform: translate(-50%);
  164.         top: 84%;
  165.         font:normal 3em 华文隶书;
  166.         color: #000;
  167.         white-space: pre;
  168.         -webkit-background-clip: text;
  169.         filter:drop-shadow(#FFFFFF 1px 0 0)drop-shadow(#FFFFFF 0 1px 0)drop-shadow(#FFFFFF -1px 0 0) drop-shadow(#FFFFFF 0 -1px  0);
  170. }
  171. #lrc::before {
  172.         position: absolute;
  173.         content: attr(data-lrc);
  174.         width: 20%;
  175.         height: 100%;
  176.         color: transparent;
  177.         overflow: hidden;
  178.         white-space: pre;
  179.         background: var(--bg);
  180.        
  181.         -webkit-background-clip: text;
  182.         animation: var(--motion) var(--tt) linear forwards;
  183.         animation-play-state: var(--state);
  184. }
  185. @keyframes cover1 { from { width: 0; } to { width: 100%;} }
  186. @keyframes cover2  { from { width: 0;} to { width: 100%;} }
  187. </style>

  188.   <script>
  189. let imgContainer = document.querySelector(".img-container");
  190. setInterval(() => {
  191.      if(!aud.paused){
  192.         let last = imgContainer.firstElementChild;
  193.         last.remove();
  194.         imgContainer.appendChild(last);}
  195.       }, 2500);
  196. </script>
  197. <script>

  198. mplayer.onclick = () => aud.paused ? (aud.play()): (aud.pause());
  199. aud.addEventListener('playing', () =>mplayer.style.animationPlayState = 'running');
  200. aud.addEventListener('pause', () =>mplayer.style.animationPlayState = 'paused');

  201. </script>
  202. <script >
  203. (function() {
  204. /*原始lrc歌词*/
  205. let lrcStr = `[00:01.29]你别哭 你别哭
  206. [00:04.95]我知道你走的很辛苦
  207. [00:08.79]那种身心上的疲惫和无助
  208. [00:12.78]是旁人感受不到的难处
  209. [00:31.41]我知道 你坚强的背后
  210. [00:35.10]一定藏着很多脆弱
  211. [00:38.85]我知道 你懂事的背后
  212. [00:42.63]一定藏着很多失落
  213. [00:46.35]我知道 你笑容的背后
  214. [00:50.10]一定藏着很多难过
  215. [00:53.88]有时候会莫名眼泪滑落
  216. [00:57.96]却不知该怎么诉说
  217. [01:02.96]因为代码太长所以只好把歌词删掉一部分
  218. `;

  219. /*变量 :mKey - 当前歌词索引;mFlag :调用关键帧动画索引;averAdd :平均值补偿*/
  220. let mKey = 0, mFlag = true, averAdd = 0.3;

  221. /*函数 :获取每句歌词用时,歌词用时若超过平均值则取平均值,最后一句歌词则取平均值*/
  222. let lrcTime = (ar) => {
  223.         let tmpAr = [];
  224.         for(j = 0; j <ar.length - 1; j ++) {
  225.                 if(j !== ar.length - 1) tmpAr[j] = parseFloat((ar[j+1][0] - ar[j][0]).toFixed(1));
  226.         }
  227.         let aver = parseInt(tmpAr.reduce((a,b) => a + b) / (tmpAr.length - 1)) + averAdd;
  228.         tmpAr.push(aver);
  229.         tmpAr.forEach((item,key) => {
  230.                 ar[key][2] = item > aver ? aver : item;
  231.         });
  232.         return ar;
  233. };

  234. /*函数 :从原始lrc歌词获取信息并存入 n*3 数组*/
  235. let getLrcAr = (text) => {
  236.         let lrcAr = [];
  237.         let calcRule = [60,1,0.001];
  238.         for(x of text.split('\n')) {
  239.                 let ar = [];
  240.                 let re = /\d+[\.:]\d+([\.:]\d+)?/g;
  241.                 let geci = x.replace(re,'');
  242.                 if(geci) {
  243.                         geci = geci.replace(/[\[\]\'"\t,]s?/g,'');
  244.                         let time = x.match(re);
  245.                         if(time != null) {
  246.                                 for(y of time) {
  247.                                         let tmp = y.match(/\d+/g);
  248.                                         let sec = 0;
  249.                                         for(z in tmp) sec += tmp[z] * calcRule[z];
  250.                                         ar[0] = [parseFloat(sec.toFixed(2)), geci];
  251.                                         lrcAr.push(ar[0]);
  252.                                 }
  253.                         }
  254.                 }
  255.         }
  256.         lrcAr.sort((a,b)=> a[0] - b[0]);
  257.         return(lrcTime(lrcAr));
  258. };

  259. /*函数 :模拟显示同步歌词*/
  260. let showLrc = (time) => {
  261.         let name = mFlag ? 'cover1' : 'cover2';
  262.         lrc.innerHTML = lrcAr[mKey][1];
  263.         lrc.dataset.lrc = lrcAr[mKey][1];
  264.         lrc.style.setProperty('--motion', name);
  265.         lrc.style.setProperty('--tt', time + 's');
  266.         lrc.style.setProperty('--state', 'running');
  267.         mKey += 1;
  268.         mFlag = !mFlag;
  269. };

  270. /*函数 :处理当前歌词索引 mKey*/
  271. let calcKey = () => {
  272.         for (j = 0; j < lrcAr.length; j++) {
  273.                 if (aud.currentTime <= lrcAr[j][0]) {
  274.                         mKey = j - 1;
  275.                         break;
  276.                 }
  277.         }
  278.         if (mKey < 0) mKey = 0;
  279.         if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
  280.         let time = lrcAr[mKey][2] - (aud.currentTime - lrcAr[mKey][0]);
  281.         showLrc(time);
  282. };

  283. /*格式化时间信息*/
  284. let toMin = (val) => {
  285.         if (!val) return '00:00';
  286.         val = Math.floor(val);
  287.         let min = parseInt(val / 60),
  288.         sec = parseFloat(val % 60);
  289.         if (min < 10) min = '0' + min;
  290.         if (sec < 10) sec = '0' + sec;
  291.         return min + ':' + sec;
  292. }

  293. /*函数 :关键帧动画状态切换*/
  294. let mState = () => aud.paused ? (lrc.style.setProperty('--state','paused'),mplayer.style.animationPlayState = 'paused') : (lrc.style.setProperty('--state','running'),mplayer.style.animationPlayState = 'running');

  295. /*监听播放进度*/
  296. aud.addEventListener('timeupdate', () => {
  297.         for (j = 0; j < lrcAr.length; j++) {
  298.                 if (aud.currentTime >= lrcAr[j][0]) {
  299.                         cKey = j;
  300.                         if (mKey === j) showLrc(lrcAr[j][2]);
  301.                         else continue;
  302.                 }
  303.         }
  304. });
  305. aud.addEventListener('pause', () => mState());/*监听暂停事件*/
  306. aud.addEventListener('play', () => mState());/*监听播放事件*/
  307. aud.addEventListener('seeked', () => calcKey());/*监听查询事件*/
  308. let lrcAr = getLrcAr(lrcStr); /*获得歌词数组*/
  309. })();

  310. </script>

  311. </div>

  312. <div style="width: 100%;height: 780px;"> </div>

复制代码


314

主题

6442

回帖

3万

积分

版主

积分
36738
发表于 2024-10-22 11:25:35 | 显示全部楼层 IP:辽宁
老谟深虑 发表于 2024-10-22 11:09
欣赏老师的精美音画,老师厉害,图动了,歌词也显示了,向老师学习!
...

一幅非常完美的音画佳作!

12

主题

1172

回帖

1万

积分

超级版主

积分
19421
发表于 2024-10-22 11:27:12 | 显示全部楼层 IP:亚太地区
我用二个浏览器打不开,同步歌词不显示,图片也不动了。

296

主题

2万

回帖

9万

积分

版主

积分
95792
发表于 2024-10-23 03:59:49 | 显示全部楼层 IP:山东

这么长的代码呀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|离退休论坛 ( 浙B2-20100176 )

GMT+8, 2024-11-22 03:22 , Processed in 0.073815 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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