js做一个简单的视频弹幕的代码
时间: 2023-06-07 13:07:29 浏览: 126
好的,请看以下代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>视频弹幕</title>
<style type="text/css">
div{
position: relative;
width: 320px;
height: 240px;
margin: 0 auto;
background: #000;
}
video{
width: 100%;
height: 100%;
object-fit: fill;
}
.bullet{
position: absolute;
color: #fff;
font-size: 16px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
</head>
<body>
<div>
<video src="video.mp4" controls></video>
</div>
<input type="text" id="bullet-input">
<button id="bullet-btn">发射弹幕</button>
<script type="text/javascript">
var bulletScreen = function(){
var screenBox = document.querySelector('div'); // 弹幕容器
var video = screenBox.querySelector('video'); // 视频
var bulletArray = []; // 弹幕数组
// 添加弹幕
function addBullet(){
var inputVal = document.querySelector('#bullet-input').value;
if(inputVal){
var bulletBox = document.createElement('div');
bulletBox.className = 'bullet';
bulletBox.innerText = inputVal;
bulletScreenFlow(bulletBox);
screenBox.appendChild(bulletBox);
bulletArray.push(bulletBox);
}
}
// 弹幕动画
function bulletScreenFlow(bulletBox){
bulletBox.style.top = Math.random()*screenBox.offsetHeight+'px';
var time = (screenBox.offsetWidth+bulletBox.offsetWidth)/90; // 弹幕动画时间
bulletBox.style.transition = 'all '+time+'s linear';
bulletBox.style.transform = 'translateX(-'+(screenBox.offsetWidth+bulletBox.offsetWidth)+'px)';
bulletBox.addEventListener('transitionend', function(){
screenBox.removeChild(bulletBox);
bulletArray.splice(bulletArray.indexOf(bulletBox),1);
})
}
// 监听回车键
document.querySelector('#bullet-input').addEventListener('keydown', function(e){
if(e.keyCode == 13){
addBullet();
document.querySelector('#bullet-input').value = '';
}
})
// 监听发射弹幕按钮
document.querySelector('#bullet-btn').addEventListener('click', function(){
addBullet();
document.querySelector('#bullet-input').value = '';
})
// 初始获取弹幕
function getBullet(){
for(var i=0;i<bulletArray.length;i++){
bulletScreenFlow(bulletArray[i]);
}
setTimeout(getBullet, 500);
}
getBullet();
}
window.onload = function(){
bulletScreen();
}
</script>
</body>
</html>
```
解释如下:
1. 在 HTML 中,我们通过 `<div>` 标签来创建了一个容器,并在容器中嵌入了一个视频。
2. 通过一个文本输入框和一个按钮来向弹幕容器中添加弹幕。
3. 在 CSS 样式中,我们给弹幕容器和视频都加了一些样式,并且定义了弹幕的样式。
4. 在 JavaScript 中,我们定义了一个 `bulletScreen` 的函数,并义了两个子函数 `addBullet` 和 `bulletScreenFlow`,分别用于添加弹幕和控制弹幕的动画效果。
5. 我们在 `bulletScreen` 函数中,监听用户使用键盘或按钮发送弹幕的操作,并将弹幕加入到弹幕容器中。
6. 最后,我们调用 `bulletScreen` 函数,启动弹幕功能。在一定的时间间隔内,程序会循环获取弹幕数组中的弹幕,并通过 `bulletScreenFlow` 函数,使这些弹幕动起来。
阅读全文