红影 发表于 2022-9-5 10:51

因为想你才寂寞(学习黑黑纯SVG播放器效果)

<style>
#papa { left: -214px; top:120px; width: 1024px; height: 640px;box-shadow: 3px 3px 20px #000; overflow: hidden; user-select: none; display: grid; place-items: center; position: relative; }
/* svg按钮↓*/
#mplayer { position: absolute; bottom: 0;left:560px; }
#btnpause { display: none; }
#btnwrap, #btnplay, #btnpause { cursor: pointer; }
#btnplay:hover + btnwrap, #btnpause:hover + btnwrap { fill: gold; }
#btnwrap:hover { fill: gold; }
#btnwrap:hover + #btnplay + #btnpause { fill: red;}
#tmsg { dominant-baseline: middle; fill: snow; }
#track { shape-rendering: crispEdges; cursor: pointer; }
/* svg 歌词及动态效果 ↓ */
#lrc { position: absolute; width: 80px; height: 760px; top: -240px; left:662px; }
.text { font: bold 2em sans-serif;dominant-baseline: middle; letter-spacing: 2px; fill: none; stroke-width: 1.5px; stroke-dasharray: 90 310; animation: stroke 6s infinite linear; writing-mode:vertical-rl; }
.text-1{ stroke: snow; text-shadow: 0 0 5px red; animation-delay: -1.5s; }
.text-2{ stroke: orange; text-shadow: 0 0 5px green; animation-delay: -3s; }
.text-3{ stroke: gold; text-shadow: 0 0 5px blue; animation-delay: -4.5s; }
.text-4{ stroke: tomato; text-shadow: 0 0 5px purple; animation-delay: -6s; }
@keyframes stroke { to { stroke-dashoffset: -400; } }
.shipin { position: absolute; width: 100%; height: 725px; top:-80px;object-fit: cover; }

</style>

<div id="papa">
      <video class="shipin" src="https://img.tukuppt.com/video_show/2418175/00/02/01/5b4f55c95539b.mp4" muted="muted" autoplay="autoplay" loop="loop"></video>
      <div style="position: absolute; left:0px; bottom: 0px; width:1024px;">
                <img alt="" src="https://pic.imgdb.cn/item/6315549716f2c2beb1fe57f3.png"/></div>
      <svg id="lrc">
                <text x="50%" y="50%" class="text text-1">lrc歌词</text>
                <text x="50%" y="50%" class="text text-2">lrc歌词</text>
                <text x="50%" y="50%" class="text text-3">lrc歌词</text>
                <text x="50%" y="50%" class="text text-4">lrc歌词</text>
      </svg>
      <svg id="mplayer" width="400" height="60">
                <circle id="btnwrap" cx="20" cy="30" r="15" fill="olive" />
                <polygon id="btnplay" points="15 20, 15 40, 30 30" fill="snow" />
                <g id="btnpause" fill="snow">
                         <rect x= "15" y="20" width="3" height="20" />
                        <rect x="22" y="20" width="3" height="20" />
                </g>
                <g id="track"stroke-width="2">
                        <line x1="45" y1="30" x2="245" y2="30" stroke="transparent" stroke-width = "20" />
                        <line x1="45" y1="30" x2="245" y2="30" stroke="snow" />
                        <line id="prog" x1="45" y1="30" x2="245" y2="30" stroke="red" stroke-dasharray="200" stroke-dashoffset="200" />
                </g>
                <text id="tmsg" x="260" y="30">00:00 | 00:00</text>
      </svg>
</div><br><br><br><br><br><br>

<script>
let lrcAr = [
        ['0.03','《因为想你才寂寞》'],
        ['10.03','学习黑黑纯SVG制作'],
        ['21.43','躲在开了关了灯的'],
        ['23.38','房间里面'],
        ['27.30','过去的画面 '],
        ['29.83','在眼前浮现'],
        ['32.57','有一种感觉叫做'],
        ['36.08','失眠'],
        ['37.39','那是因为我们当初'],
        ['39.79','爱得太甜'],
        ['42.94','躲在曾经'],
        ['44.99','熟悉的房间'],
        ['47.77','发呆看着我们那时'],
        ['50.02','傻傻的照片'],
        ['53.01','如果当时我抱紧'],
        ['55.41','让你感觉温暖'],
        ['58.19','是否你会留下 '],
        ['60.80','陪我走的更远'],
        ['65.99','因为想你才会寂寞'],
        ['68.43','因为爱你才会难过'],
        ['71.69','听到你的名字'],
        ['74.36','都会让我失措'],
        ['76.44','因为想你才会沉默'],
        ['79.11','因为爱你才会落寞'],
        ['81.96','我们的故事'],
        ['83.55','不想对任何人说'],
        ['86.95','你有没有想过我'],
        ['89.49','你有没有念着我'],
        ['92.58','还是选择忘记'],
        ['95.02','当作是解脱'],
        ['97.42','你还会不会想到我'],
        ['99.89','你还会不会继续爱我'],
        ['102.80','在见面的时候 '],
        ['106.25','是拥抱还是错过'],
        ['129.15','躲在曾经'],
        ['131.38','熟悉的房间'],
        ['133.98','发呆看着我们那时'],
        ['136.71','傻傻的照片'],
        ['139.12','如果当时我抱紧'],
        ['141.66','让你感觉温暖'],
        ['144.32','是否你会留下 '],
        ['146.96','陪我走的更远'],
        ['152.18','因为想你才会寂寞'],
        ['154.70','因为爱你才会难过'],
        ['157.82','听到你的名字'],
        ['160.04','都会让我失措'],
        ['162.61','因为想你才会沉默'],
        ['165.18','因为爱你才会落寞'],
        ['168.05','我们的故事'],
        ['169.58','不想对任何人说'],
        ['173.00','你有没有想过我'],
        ['175.64','你有没有念着我'],
        ['178.71','还是选择忘记'],
        ['181.12','当作是解脱'],
        ['183.52','你还会不会想到我'],
        ['186.04','你还会不会继续爱我'],
        ['188.87','在见面的时候 '],
        ['192.39','是拥抱还是错过'],
        ['194.77','你离开我'],
        ['195.58','就把我忘了吧'],
        ['199.12','想念一个人'],
        ['200.46','真的很寂寞'],
        ['204.34','如果过去的爱'],
        ['206.91','再也不回来'],
        ['209.53','我情愿你能得到'],
        ['214.98','快乐'],
        ['236.20','因为想你才会寂寞'],
        ['240.91','最后唱这首歌 '],
        ['244.58','你听不到的情歌']
];
let aud = new Audio(), lw = prog.getTotalLength(), txtAr = document.querySelectorAll('.text');
aud.src = 'https://music.163.com/song/media/outer/url?id=301442.mp3';
aud.autoplay = true;
aud.loop = true;

track.onclick = (e) => aud.currentTime = aud.duration * (e.offsetX - prog.getAttribute('x1')) / lw;
btnwrap.onclick = btnpause.onclick = btnplay.onclick = () => aud.paused ? aud.play() : aud.pause();

aud.addEventListener('playing', ()=> btnstate());
aud.addEventListener('pause', ()=> btnstate());

aud.addEventListener('timeupdate', () => {
      prog.style.strokeDashoffset = lw - lw * aud.currentTime / aud.duration + 'px';
      tmsg.textContent = toMin(aud.currentTime) + ' | ' + toMin(aud.duration);
      for(j = 0; j < lrcAr.length;j ++) {
                if(aud.currentTime >= lrcAr) {
                        for(ele of txtAr) ele.textContent = lrcAr;
                }
      }
});

let btnstate = () => aud.paused ? (btnplay.style.display = 'block', btnpause.style.display = 'none') :

(btnplay.style.display = 'none', btnpause.style.display = 'block');

let toMin = (val)=> {
      if (!val) return '00:00';
      val = Math.floor(val);
      let min = parseInt(val / 60), sec = parseFloat(val % 60);
      if(min < 10) min = '0' + min;
      if(sec < 10) sec = '0' + sec;
      return min + ':' + sec;
}
</script>

红影 发表于 2022-9-5 10:55

看到黑黑又出新效果,赶紧把之前的学习一下。黑黑的方法很好,不能听歌的时候,可以用本地歌曲做歌词,再使用保存过的地址,合在一起就可以了。感谢黑黑的代码{:4_187:}

梦油 发表于 2022-9-5 10:55

影子朋友早上好!
这字幕真漂亮!

红影 发表于 2022-9-5 10:57

黑黑说SVG给出的是文字,而不是画布那样给出的图形,所以试验了一下竖排,果真可以。
只是,为什么在歌词里加<br>歌词无法分行呢?记得以前可以的?@马黑黑
因为怕歌词太长,害得我硬是把一句分成两句{:4_173:}

梦缘 发表于 2022-9-5 11:15

制作漂亮,欣赏学习,问好老师!{:4_204:}

马黑黑 发表于 2022-9-5 12:42

红影 发表于 2022-9-5 10:57
黑黑说SVG给出的是文字,而不是画布那样给出的图形,所以试验了一下竖排,果真可以。
只是,为什么在歌词 ...

<br>是HTML标签,仅对 innerHTML 的显示有效。

svg和canvas一样,都不支持文本换行。歌词偏长的,可以考虑将 svg 的 text 元素设为较长,我的是设置为 1000,你用 writing-mode 设置文本方向为竖排,则需要考虑帖子高度够不够用,因为此种模式,text 的宽度占用的是帖子的高度。

四海八荒 发表于 2022-9-5 17:08

{:4_204:}好听的歌。歌词很喜欢

红影 发表于 2022-9-5 18:59

梦油 发表于 2022-9-5 10:55
影子朋友早上好!
这字幕真漂亮!

这个歌词字母是黑黑代码,特别漂亮呢{:4_204:}

红影 发表于 2022-9-5 19:00

梦缘 发表于 2022-9-5 11:15
制作漂亮,欣赏学习,问好老师!

谢谢梦缘临帖鼓励{:4_187:}

红影 发表于 2022-9-5 19:02

马黑黑 发表于 2022-9-5 12:42
是HTML标签,仅对 innerHTML 的显示有效。

svg和canvas一样,都不支持文本换行。歌词偏长的,可以考虑 ...

哦,不支持文本换行啊。嗯嗯,记下了。
知道的,竖向的需要考虑高度够不够。这个歌曲有些歌词比较长,我已经用花潮LRC人为把歌词多分了行数,这样每句都不太长了。没看分行后,有些歌词只剩2个字了{:4_173:}

红影 发表于 2022-9-5 19:03

四海八荒 发表于 2022-9-5 17:08
好听的歌。歌词很喜欢

这歌词有点伤感,但是很真实的情感{:4_204:}

马黑黑 发表于 2022-9-5 19:09

红影 发表于 2022-9-5 19:02
哦,不支持文本换行啊。嗯嗯,记下了。
知道的,竖向的需要考虑高度够不够。这个歌曲有些歌词比较长,我 ...

也不必弄的太短,合适就好

红影 发表于 2022-9-5 20:59

马黑黑 发表于 2022-9-5 19:09
也不必弄的太短,合适就好

嗯嗯,大致看了一下,按现在的字号,最多到10字以下,就挺好{:4_173:}

小辣椒 发表于 2022-9-5 21:01

亲爱的,你最棒,学以致用,优秀学员{:4_170:}

马黑黑 发表于 2022-9-5 21:12

红影 发表于 2022-9-5 20:59
嗯嗯,大致看了一下,按现在的字号,最多到10字以下,就挺好

{:4_181:}

加林森 发表于 2022-9-5 21:18

制作漂亮。赞!

红影 发表于 2022-9-5 22:22

小辣椒 发表于 2022-9-5 21:01
亲爱的,你最棒,学以致用,优秀学员

都是现成的命令,我只是试试而已{:4_173:}

红影 发表于 2022-9-5 22:23

马黑黑 发表于 2022-9-5 21:12


然后超过10个的,就都被我硬分行了。

红影 发表于 2022-9-5 22:23

加林森 发表于 2022-9-5 21:18
制作漂亮。赞!

谢谢队长鼓励{:4_204:}

东篱闲人 发表于 2022-9-5 22:24

看看想谁想寂寞啦。。。。{:5_117:}
页: [1] 2 3 4 5
查看完整版本: 因为想你才寂寞(学习黑黑纯SVG播放器效果)