花潮论坛

搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 杨帆

竖排歌词不滚动,请马老师让它动起来,谢谢[已解决]

[复制链接]
  • TA的每日心情
    慵懒
    2025-12-14 13:47
  • 签到天数: 1669 天

    [LV.Master]伴坛终老

    3047

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2025-4-8 22:42 | 显示全部楼层
    杨帆 发表于 2025-4-8 21:39
    由衷感谢,谢谢马老师鼓励!

    我多次点刷新按钮,可只有前5句,看不到第6句及以后的歌词呀

    原因是音乐此刻缓冲太慢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2025-4-9 01:09 | 显示全部楼层
    马黑黑 发表于 2025-4-8 22:42
    原因是音乐此刻缓冲太慢

    点击进度条歌词不滚动,应是代码问题,请老师抽空对代码修正、完善,由衷感谢
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2025-4-9 11:16 | 显示全部楼层
    杨帆 发表于 2025-4-8 17:30 是,适当套用就好,可全套会失去探索过程的乐趣
    00:00
    00:00
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2025-4-9 11:19 | 显示全部楼层
    杨帆 发表于 2025-4-8 17:30
    是,适当套用就好,可全套会失去探索过程的乐趣
    1. <style>
    2.   #papa {
    3.     position: absolute;
    4.     left: 50%;
    5.     transform: translateX(-50%);
    6.     width: clamp(800px, 75vw, 1280px);
    7.     height: clamp(450px, 75vh, 750px);
    8.     background: #eee url('https://pic.imgdb.cn/item/668a84acd9c307b7e9437ddf.jpg') no-repeat center/cover;
    9.     z-index: 1;
    10.   }

    11.   .zw {
    12.     height: clamp(450px, 75vh, 750px);
    13.     margin: 30px;
    14.     --state: paused;
    15.     z-index: 1;
    16.   }

    17.   #lrcDiv {
    18.     writing-mode: vertical-rl;
    19.     --hlcolor: #FF44AA;
    20.     position: absolute;
    21.     top: 1%;
    22.     right: 10%;
    23.     display: flex;
    24.     flex-direction: column;
    25.     gap: 6px;
    26.     width: 145px;
    27.     height: 650px;
    28.     overflow: hidden;
    29.     font: normal 18px/24px 'Microsoft YaHei', sans-serif;
    30.     text-align: center;
    31.     color: #FFBB66;
    32.     background: none;
    33.     z-index: 5;
    34.   }

    35.   #lrcDiv>p {
    36.     margin: 0;
    37.     padding: 0;
    38.     transition: .95s;
    39.   }

    40.   #lrcDiv>p.hlight {
    41.     color: var(--hlcolor);
    42.     font-size: 28px;
    43.     font-weight: bold;
    44.   }

    45.   #mplayer {
    46.     z-index: 5;
    47.     --track: silver;
    48.     --prog: red;
    49.     --percent: 0;
    50.     display: flex;
    51.     left: 300px;
    52.     top: 580px;
    53.     gap: 15px;
    54.     flex-direction: column;
    55.     align-items: center;
    56.     width: 650px;
    57.     background: none;
    58.     color: white;
    59.     padding: 15px;
    60.     position: absolute;
    61.   }

    62.   #btns-area {
    63.     width: 100%;
    64.     display: flex;
    65.     justify-content: space-between;
    66.     margin-top: 15px;
    67.   }

    68.   #btn-play {
    69.     width: 20px;
    70.     height: 20px;
    71.     cursor: pointer;
    72.     position: relative;
    73.   }

    74.   #btn-play:hover::after {
    75.     opacity: .7;
    76.     filter: alpha(opacity:.5);
    77.   }

    78.   #btn-play::after {
    79.     position: absolute;
    80.     content: '';
    81.     width: 100%;
    82.     height: 100%;
    83.     background: var(--prog);
    84.     clip-path: var(--clip);
    85.   }

    86.   #progDiv {
    87.     z-index: 5;
    88.     width: 100%;
    89.     height: 10px;
    90.     background: linear-gradient(to right, var(--prog) var(--percent), var(--track) var(--percent), var(--track) 0) no-repeat 0 50% / 100% 2px;
    91.     cursor: pointer;
    92.   }

    93.   .play {
    94.     --clip: polygon(10% 0, 100% 50%, 10% 100%);
    95.   }

    96.   .pause {
    97.     --clip: polygon(40% 0, 40% 100%, 20% 100%, 20% 0, 80% 0, 80% 100%, 60% 100%, 60% 0);
    98.   }

    99.   .vid {
    100.     position: absolute;
    101.     width: 100%;
    102.     height: 100%;
    103.     opacity: .8;
    104.     object-fit: cover;
    105.     mask: radial-gradient(transparent 20%, red);
    106.     -webkit-mask: radial-gradient(transparent 20%, red);
    107.     pointer-events: none;
    108.     left: 0px;
    109.     top: 0px;
    110.   }
    111. </style>
    112. <div id="papa">
    113.   <div id="lrcDiv"></div>
    114.   <div id="mplayer">
    115.     <div id="btns-area">
    116.       <div id="time1">00:00</div>
    117.       <div id="btn-play" class="pause"></div>
    118.       <div id="time2">00:00</div>
    119.     </div>
    120.     <div id="progDiv"></div>
    121.   </div>
    122.   <video class="vid " src="https://bpic.588ku.com/video_listen/588ku_video/22/11/03/14/51/00/video636364d43e50d.mp4" loop muted autoplay=""></video>
    123.   <audio src="https://cccimg.com/view.php/d05d8a08510c3c47ab212b4fa6668f52.mp3" autoplay loop></audio>
    124. </div>
    125. <div class="zw"></div>

    126. <script>
    127. const mplayer = document.querySelector('#mplayer');
    128.         const aud = document.querySelector('audio');
    129.         const lrcDiv = document.querySelector('#lrcDiv');
    130.         const progDiv = document.querySelector('#progDiv');
    131.         const btnPlay = document.querySelector('#btn-play');
    132.         const vids = document.querySelectorAll('video');
    133.        
    134.        let lrcAr = [], isFScreen = false;
    135.            let lineHeight = 40, showLines = 5;                // 滚动需要的关键参数
    136.                 lrcDiv.style.width = lineHeight * showLines + 'px';         //        根据行数计算容器的宽度
    137.                
    138.         const getLrcAr = (text) => {
    139.         const ar = text.trim().split(/[\r\n]+/g);
    140.                 var reg = /\[(\d+)[.:](\d+)[.:](\d+)\](.*)/;
    141.                 ar.forEach(item => {                       
    142.                                 let result = item.match(reg);
    143.                                 let tmsg = parseInt(result[1]) * 60 + parseInt(result[2]) + parseInt(result[3]) / 1000;
    144.                                 lrcAr.push([tmsg, result[4].trim()]);
    145.                                 let p = document.createElement('p');
    146.                                 p.textContent = result[4].trim();
    147.                                 lrcDiv.appendChild(p);
    148.                
    149.                 });
    150.                 lrcAr.sort((a, b) => a[0] - b[0]);
    151.         };

    152.         const updatePlayerDatas = () => {
    153.                 const percent = (aud.currentTime / aud.duration) * 100;
    154.                 time1.innerText = formatTime(aud.currentTime);
    155.                 time2.innerText = formatTime(aud.duration);
    156.                 mplayer.style.setProperty('--percent', percent + '%');
    157.                 for (let i = 0; i < lrcAr.length; i ++) {
    158.                         const lrc = {time: lrcAr[ i ][0], text: lrcAr[ i ][1]};
    159.                         const next = i < lrcAr.length - 1 ? lrcAr[i + 1][0] : null;
    160.                         const p = lrcDiv.children[ i ];
    161.                         if (aud.currentTime >= lrc.time && (!next || aud.currentTime < next)) {
    162.                                 p.classList.add('hlight');
    163.                                 //lrcDiv.scroll({left: 0, top: p.offsetLeft - lrcDiv.offsetHeight / 2 + 12, behavior: 'smooth'});
    164.                                 // 滚动的关键代码,与原来的比较下就知道为什么不动了。
    165.                                 lrcDiv.scroll({left: p.offsetLeft - (Math.ceil(showLines / 2) * lineHeight) + lineHeight, top: 0, behavior: 'smooth'});          
    166.                         } else {
    167.                                 p.classList.remove('hlight');
    168.                         }
    169.                 }
    170.         };


    171.         const formatTime = (seconds) => {
    172.                 const mins = Math.floor(seconds / 60);
    173.                 const secs = Math.floor(seconds % 60);
    174.                 return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
    175.         };

    176.         const mState = () => {
    177.                 if (aud.paused) {
    178.                         btnPlay.className = 'play';
    179.                         btnPlay.title = '点击播放';
    180.                         playvids(false);
    181.                         papa.style.setProperty('--state', 'paused');
    182.                 } else {
    183.                         btnPlay.className = 'pause';
    184.                         btnPlay.title = '点击暂停';
    185.                         playvids(true);
    186.                         papa.style.setProperty('--state', 'running');
    187.                 }
    188.         };

    189.         const playvids = (flag) => {
    190.                 if(!vids) return;
    191.                 vids.forEach(vid => flag ? vid.play() : vid.pause());
    192.         };

    193.         progDiv.addEventListener('click', (e) => aud.currentTime = e.offsetX / progDiv.offsetWidth * aud.duration);
    194.         progDiv.addEventListener('mousemove', (e) => progDiv.title = formatTime(e.offsetX / progDiv.offsetWidth * aud.duration));

    195. const lrc = `
    196. [00:00.00]时光匆匆如流水(Live 合唱版)-付飞社
    197. [00:03.83]词:未子夫
    198. [00:07.66]曲:李勇军
    199. [00:11.49]编曲:姜凯升
    200. [00:15.32]后期:鲁晓锋
    201. [00:19.15]和声:凌菲
    202. [00:22.98]制作人:李勇军工作室
    203. [00:26.81]OP:新创焦桐文化
    204. [00:30.64]【曲库专用】
    205. [00:34.47]来到人世间受苦又受累
    206. [00:42.00]尝尽了人生百般滋味
    207. [00:49.53]一路坎坷雨打又风吹
    208. [00:57.03]回首这半生我太过狼狈
    209. [01:04.50]春去秋来 花开花枯萎
    210. [01:11.97]转眼我青丝 已经成了灰
    211. [01:19.47]想找个地方 好好醉一回
    212. [01:27.06]又害怕醉了没人可依偎
    213. [01:34.50]时光匆匆 岁月如流水
    214. [01:42.00]往事随风 一去不再回
    215. [01:49.56]不知不觉容颜已憔悴
    216. [01:57.06]我这辈子遭了太多罪
    217. [02:04.47]时光匆匆 岁月如流水
    218. [02:12.03]人到了中年 没路可以退
    219. [02:19.53]看遍了人间是是与非非
    220. [02:27.06]我若心碎 谁给我安慰
    221. [02:32.43]谁给我安慰
    222. [03:12.00]春去秋来 花开花枯萎
    223. [03:19.47]转眼我青丝 已经成了灰
    224. [03:26.97]想找个地方 好好醉一回
    225. [03:34.53]又害怕醉了没人可依偎
    226. [03:41.94]时光匆匆 岁月如流水
    227. [03:49.47]往事随风 一去不再回
    228. [03:57.03]不知不觉容颜已憔悴
    229. [04:03.69]我这辈子遭了太多罪
    230. [04:11.91]时光匆匆 岁月如流水
    231. [04:19.50]人到了中年 没路可以退
    232. [04:27.00]看遍了人间是是与非非
    233. [04:34.53]我若心碎 谁给我安慰
    234. [04:40.08]谁给我安慰

    235. `;

    236. getLrcAr(lrc);

    237. aud.addEventListener('timeupdate', updatePlayerDatas);
    238.         aud.addEventListener('playing', mState);
    239.         aud.addEventListener('pause', mState);
    240.         btnPlay.addEventListener('click', () => aud.paused ? aud.play() : aud.pause());

    241. </script>
    复制代码


    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2025-4-9 12:50 | 显示全部楼层

    终于实现预期,由衷感谢老师帮助解决了困扰好久的问题,夕阳老师您辛苦了
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-14 20:04 , Processed in 0.142189 second(s), 22 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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