|
|

楼主 |
发表于 2022-12-6 21:19
|
显示全部楼层
代码:
- <style>
- #papa { margin: auto; width: 760px; height: 540px; background: gray; box-shadow: 6px 3px 20px #000; position: relative; display: grid; place-items: end center;}
- #mplayer {
- position: absolute;
- width: 100%;
- height: 160px;
- bottom: 0;
- display: flex;
- place-items: end;
- }
- .mLine {
- display: inline-block;
- margin: 0 2px 0 0;
- width: 4px;
- height: 10px;
- background: gray linear-gradient(to top,darkgreen,green,lightgreen);
- }
- </style>
- <div id="papa">
- <div id="mplayer"></div>
- <audio id="aud" src="https://aimg8.dlssyht.cn/u/0/ueditor/file/0/0/1669801666294517.mp3" loop autoplay crossorigin="anonymous"></audio>
- </div>
- <script>
- (function() {
- let total = Math.ceil(mplayer.offsetWidth / 6);
- for(j=0; j<total; j++) {
- let el = document.createElement('span');
- el.className = 'mLine';
- mplayer.appendChild(el);
- }
- let lines = document.querySelectorAll('.mLine');
- let context = new AudioContext;
- let source = context.createMediaElementSource(aud);
- let analyser = context.createAnalyser();
- source.connect(analyser);
- analyser.connect(context.destination);
- let output = new Uint8Array(total);
- (function update() {
- analyser.getByteFrequencyData(output);
- let mid = total % 2 === 0 ? total / 2 - 1 : Math.floor(total / 2);
- for(j = 0; j < total ; j++) {
- let k = j <= mid ? (mid - j) * 2 : (j - mid) * 2 - 1;
- lines[j].style.height = output[k]/2 + 'px';
- }
- window.requestAnimationFrame(update);
- })();
- mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
- })();
- </script>
复制代码
|
评分
-
| 参与人数 1 | 威望 +50 |
金钱 +100 |
经验 +50 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|