|
|

楼主 |
发表于 2023-7-20 20:30
|
显示全部楼层
代码分享
- <style>
- :root { --state: running; --prg: 0%; --delay: 0s; }
- .mydiv { margin: 0 0 0 calc(50% - 621px); width: 1080px; height: 674px; background: #333 url('https://638183.freep.cn/638183/t23/webp1/yikc.webp'); box-shadow: 0 0 8px #000; overflow: hidden; z-index: 1; display: grid; place-items: center; position: relative; }
- .heart { position: absolute; font: normal 30px sans-serif; animation: up 5s var(--delay) infinite var(--state); }
- .heart:nth-of-type(2) { --delay: -2.5s; }
- #mplayer { position: absolute; bottom: 10px; width: 200px; height: 40px; background: linear-gradient(to right,red var(--prg),#eee 0) repeat-x 0 50% / 100% 2px; }
- #mplayer::before, #mplayer::after { position: absolute; top: 28%; font-size: 14px; }
- #mplayer::before { content: attr(data-cu); left: -50px; }
- #mplayer::after { content: attr(data-du); right: -50px; }
- #btnplay { position: absolute; left: calc(var(--prg) - 15px); bottom: 0; font: normal 30px sans-serif; cursor: pointer; animation: swing .3s infinite linear var(--state); }
- @keyframes swing { from { transform: rotate(90deg) skew(-5deg); } to { transform: rotate(90deg) skew(5deg); } }
- @keyframes up { 0% { opacity: 0; transform: rotate(0deg) translateY(0px); } 75% { opacity: 1; transform: rotate(-10deg) translateY(-300px); } 100% { opacity: 0; transform: rotate(-60deg) translateY(0px); } }
- </style>
- <div class="mydiv">
- <span class="heart">💗</span>
- <span class="heart">💓</span>
- <div id="mplayer" data-cu="00:00" data-du="00:00" title="调节进度">
- <div id="btnplay" title="暂停/播放">🐞</div>
- </div>
- <audio id="aud" src="https://music.163.com/song/media/outer/url?id=25931264" loop autoplay></audio>
- </div>
- <script>
- (function() {
- let root = document.querySelector(':root');
- 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;}
- let mState = () => root.style.setProperty('--state', aud.paused ? 'paused' : 'running');
- aud.addEventListener('pause', mState, false);
- aud.addEventListener('play', mState, false);
- aud.addEventListener('timeupdate', () => { root.style.setProperty('--prg', aud.currentTime / aud.duration * 100 + '%'); mplayer.dataset.cu = toMin(aud.currentTime); mplayer.dataset.du = toMin(aud.duration); });
- btnplay.onclick = (e) => { e.stopPropagation(); aud.paused ? aud.play() : aud.pause(); }
- mplayer.onclick = (e) => aud.currentTime = aud.duration * e.offsetX / mplayer.offsetWidth;
- })();
- </script>
复制代码
|
|