请问要实现一个音乐播放器,是不是写完样式和交互之后,那把video元素隐藏,点击播放把音乐的src给到video把音乐的封面给到那个装封面地div就行?
我是这么想的,不知道对不对
你的想法基本上是正确的,在实现音乐播放器时,可以使用video元素标签来处理音频播放,同时通过CSS样式和交互来控制其外观和行为,可以参考下这个小示例,应该可以帮到你
<!DOCTYPE html>
<html>
<head>
<title>音乐播放器</title>
<style>
.music-player .player {
display: none; /* 初始状态下隐藏video元素 */
}
.music-player .cover {
/* 设置封面样式 */
}
.music-player .controls {
/* 设置控制按钮样式 */
}
</style>
</head>
<body>
<div class="music-player">
<div class="cover">
<!-- 封面图像显示在这里 -->
</div>
<video class="player" controls>
<!-- 音乐文件将在这里播放 -->
</video>
<div class="controls">
<button class="play-button">播放</button>
</div>
</div>
<script>
// 获取元素
const player = document.querySelector('.player');
const cover = document.querySelector('.cover');
const playButton = document.querySelector('.play-button');
// 监听播放按钮点击事件
playButton.addEventListener('click', () => {
// 更新video的src和显示封面
player.src = '音乐文件的URL';
cover.style.backgroundImage = 'url(封面图像的URL)';
// 显示video元素
player.style.display = 'block';
// 播放音乐
player.play();
});
</script>
</body>
</html>
1、问题:
在开发react项目中,有个需求是要动态的改变video中的视频。但是video标签中的src已经更新,视频却还是显示原来的视频,并未更新。
2、产生原因:
当 video 中存在 source 标签的时候,浏览器渲染之后会自动去获取地址,即便地址改变,浏览器也不会再去获取地址。
3、有效的解决方案:
法一:不使用source标签,直接在video中使用src,动态切换这里面的src
<video src={'http://' + item.video} width="320" height="240" controls autoPlay preload="auto" style={{ objectFit: 'fill' }}></video>
法二:使用插件:video-react
安装:npm install video-react
// 导入后使用
<Player playsInline src={'http://' + item.video} />
4、之前的无效尝试
方法一:
使用video + source,在video 和 source中都使用src,在src更新后,利用video的load方法进行更新;
<video id="myVideo" src={'http://' + item.video} width="320" height="240" controls autoPlay preload="auto" style={{ objectFit: 'fill' }}>
<source src={'http://' + item.video}></source>
</video>
// 当video更新后使用load方法重新加载
document.getElementById("myVideo").load();
效果 :
src更新后,视频显示框不会再显示原来的视频了,但是很难加载到新的视频,大部分情况下是直接黑掉。