马黑黑 发表于 2022-9-2 06:57

冰河

<style>
#papa { left: -214px; width: 1024px; height: 640px; background: gray url('/data/attachment/forum/202209/02/065401ejiwmso2m2oag1ci.jpg') no-repeat center/cover; box-shadow: 3px 3px 20px #000; display:grid; place-items: center; user-select: none; overflow: hidden; position: relative; z-index: 1; }
#mplayer { position: absolute; bottom: 10px; right: 10px; width: fit-content; height: fit-content; display: flex; align-items: center; gap: 8px; z-index: 9; }
#btnwrap { position: relative; width: 36px; height: 36px; display: grid; place-items: center; border-radius: 50%; background: #ccc linear-gradient(to top right, rgba(255,0,0,.75), rgba(0,255,0,.75)); cursor: pointer; }
#btnwrap:hover { background: #000 linear-gradient(to top right, rgba(255,0,0,.75), rgba(0,255,0,.75)); }
#btnplay { width: 20px; height: 20px; background: #ccc; clip-path: polygon(0 0, 0% 100%, 100% 50%); }
#btnpause { width: 2px; height: 20px; border-style: solid; border-width: 0px 4px; border-color: transparent #eee; display: none; }
#prog { width: 300px; height: 2px; background: #ccc linear-gradient(to right,red,orange,green,tomato) no-repeat; background-size: 1px 2px; cursor: pointer; position: relative;}
#prog::before { position: absolute; content: ''; top: -7px; width: inherit; height: 15px; }
#prog:hover::before { background: rgba(0,200,200,.15); }
#tmsg { font: normal 16px sans-serif; color: lightblue;}
#lrc { position: absolute; left: 10px; bottom: 10px; font: bold 1.5em sans-serif; color: lightblue; text-shadow: 1px 1px 2px #000; text-align: center; }
#lrc:hover, #tmsg:hover { color: snow; }
#vid { position: absolute; width: 1024px; height: 695px; top: -55px; object-fit: cover; opacity: 0.25; }
</style>

<div id="papa">
        <video id="vid" src="https://img.tukuppt.com/video_show/2422006/00/03/03/5ba38e0f3bdba.mp4" muted="muted" autoplay="autoplay" loop="loop"></video>
        <div id="mplayer"><span id="btnwrap"><span id="btnplay"></span><span id="btnpause"></span></span><span id="prog"></span><span id="tmsg">00:00 | 00:00</span></div>
        <div id="lrc">lrc歌词</div>
</div>

<script>
let lrcAr = [
        ['0.00','纯音乐 - 冰河'],
        ['160.00','感谢支持']
];
let aud = new Audio();
aud.src = 'https://music.163.com/song/media/outer/url?id=1295445124.mp3';
aud.autoplay = true;
aud.loop = true;
btnwrap.onclick = () => aud.paused ? aud.play() : aud.pause();
prog.onclick = (e) => aud.currentTime = aud.duration * e.offsetX / prog.offsetWidth;
aud.addEventListener('pause', () => btnstate());
aud.addEventListener('play',() => btnstate());
aud.addEventListener('timeupdate', () => {
        prog.style.backgroundSize = prog.offsetWidth * aud.currentTime / aud.duration + 'px 2px';
        tmsg.innerText = toMin(aud.duration) + ' | ' + toMin(aud.currentTime);
        for(j=0; j<lrcAr.length; j++) {
                if(aud.currentTime >= lrcAr) lrc.innerText = 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-2 06:57

代码
<style>
#papa { left: -214px; width: 1024px; height: 640px; background: gray url('/data/attachment/forum/202209/02/065401ejiwmso2m2oag1ci.jpg') no-repeat center/cover; box-shadow: 3px 3px 20px #000; display:grid; place-items: center; user-select: none; overflow: hidden; position: relative; z-index: 1; }
#mplayer { position: absolute; bottom: 10px; right: 10px; width: fit-content; height: fit-content; display: flex; align-items: center; gap: 8px; z-index: 9; }
#btnwrap { position: relative; width: 36px; height: 36px; display: grid; place-items: center; border-radius: 50%; background: #ccc linear-gradient(to top right, rgba(255,0,0,.75), rgba(0,255,0,.75)); cursor: pointer; }
#btnwrap:hover { background: #000 linear-gradient(to top right, rgba(255,0,0,.75), rgba(0,255,0,.75)); }
#btnplay { width: 20px; height: 20px; background: #ccc; clip-path: polygon(0 0, 0% 100%, 100% 50%); }
#btnpause { width: 2px; height: 20px; border-style: solid; border-width: 0px 4px; border-color: transparent #eee; display: none; }
#prog { width: 300px; height: 2px; background: #ccc linear-gradient(to right,red,orange,green,tomato) no-repeat; background-size: 1px 2px; cursor: pointer; position: relative;}
#prog::before { position: absolute; content: ''; top: -7px; width: inherit; height: 15px; }
#prog:hover::before { background: rgba(0,200,200,.15); }
#tmsg { font: normal 16px sans-serif; color: lightblue;}
#lrc { position: absolute; left: 10px; bottom: 10px; font: bold 1.5em sans-serif; color: lightblue; text-shadow: 1px 1px 2px #000; text-align: center; }
#lrc:hover, #tmsg:hover { color: snow; }
#vid { position: absolute; width: 1024px; height: 695px; top: -55px; object-fit: cover; opacity: 0.25; }
</style>

<div id="papa">
        <video id="vid" src="https://img.tukuppt.com/video_show/2422006/00/03/03/5ba38e0f3bdba.mp4" muted="muted" autoplay="autoplay" loop="loop"></video>
        <div id="mplayer"><span id="btnwrap"><span id="btnplay"></span><span id="btnpause"></span></span><span id="prog"></span><span id="tmsg">00:00 | 00:00</span></div>
        <div id="lrc">lrc歌词</div>
</div>

<script>
let lrcAr = [
        ['0.00','纯音乐 - 冰河'],
        ['160.00','感谢支持']
];
let aud = new Audio();
aud.src = 'https://music.163.com/song/media/outer/url?id=1295445124.mp3';
aud.autoplay = true;
aud.loop = true;
btnwrap.onclick = () => aud.paused ? aud.play() : aud.pause();
prog.onclick = (e) => aud.currentTime = aud.duration * e.offsetX / prog.offsetWidth;
aud.addEventListener('pause', () => btnstate());
aud.addEventListener('play',() => btnstate());
aud.addEventListener('timeupdate', () => {
        prog.style.backgroundSize = prog.offsetWidth * aud.currentTime / aud.duration + 'px 2px';
        tmsg.innerText = toMin(aud.duration) + ' | ' + toMin(aud.currentTime);
        for(j=0; j<lrcAr.length; j++) {
                if(aud.currentTime >= lrcAr) lrc.innerText = 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-2 07:04

本帖播放器与lrc歌词分离,lrc歌词由CSS选择器 #lrc 支配,播放器由 #mplayer 操控,分别修改其 left | right ↔ top | bottom 即可改变它们在帖子上的物理位置。

烟雾特效使用熊猫办公的视频做成,CSS代码在选择器 #vid 那里,HTML代码中,muted="muted" 用于关闭视频声音。

马黑黑 发表于 2022-9-2 07:08

本帖所使用的播放器,核心实现代码与之前类似的播放器并无不同,仅在样式上有所调整。详情请参阅我昨天发布的两个开发教程:

一、☞ 开发html5音频播放器之界面篇



二、☞ 开发html5音频播放器之JS篇

加林森 发表于 2022-9-2 08:23

等会来学习。

红影 发表于 2022-9-2 09:25

加入的视频烟雾好美啊,特别适合这个图图。{:4_199:}
歌词和播放器分离也挺不错的,可以按需要而定了。

梦油 发表于 2022-9-2 11:15

这个音乐真好,我很喜欢。

醉美水芙蓉 发表于 2022-9-2 11:43

醉美水芙蓉 发表于 2022-9-2 11:43

醉美水芙蓉 发表于 2022-9-2 11:44

马黑黑 发表于 2022-9-2 12:16

醉美水芙蓉 发表于 2022-9-2 11:44
手机看图片被视频遮盖了!

这大概是浏览器问题吧。我用Chrome浏览器测试过,和在电脑上的效果一样。

有些手机浏览器对 opacity 的支持度不够。

马黑黑 发表于 2022-9-2 12:17

梦油 发表于 2022-9-2 11:15
这个音乐真好,我很喜欢。

这个音乐让人的情绪激昂

梦油 发表于 2022-9-2 12:19

马黑黑 发表于 2022-9-2 12:17
这个音乐让人的情绪激昂

是的,是的。

马黑黑 发表于 2022-9-2 12:19

醉美水芙蓉 发表于 2022-9-2 11:43
这个播放器就是有个缺点,手机只能看到视频,看不完整!先给黑黑老师点个赞!

手机浏览器也是讲究的。一般自带的浏览器,多数厂家封装的都是低版本的,你可以试着使用 Chrome 或 夸克浏览器试试

加林森 发表于 2022-9-2 12:29

我现在用手机看的,很清楚的。

马黑黑 发表于 2022-9-2 12:29

加林森 发表于 2022-9-2 12:29
我现在用手机看的,很清楚的。

只要是浏览器内核是比较新的版本,都行的

马黑黑 发表于 2022-9-2 12:30

梦油 发表于 2022-9-2 12:19
是的,是的。

请用茶,慢慢听歌{:4_190:}

加林森 发表于 2022-9-2 13:00

马黑黑 发表于 2022-9-2 12:29
只要是浏览器内核是比较新的版本,都行的

是的。

马黑黑 发表于 2022-9-2 13:15

加林森 发表于 2022-9-2 13:00
是的。

{:4_181:}

加林森 发表于 2022-9-2 13:26

马黑黑 发表于 2022-9-2 13:15


华为手机都可以看见的。
页: [1] 2 3
查看完整版本: 冰河