js做一个最简单的视频弹幕效果
时间: 2023-06-07 19:07:22 浏览: 50
您好,以下是用JavaScript实现最简单的视频弹幕效果的步骤:
1. 创建一个弹幕容器并设置其样式,将其设为绝对定位,并设置其高度、宽度和overflow属性为hidden,这将使其不会超出容器的范围。
2. 创建一个弹幕元素(一个文本节点)并设置其样式,将其设为绝对定位,并在容器中随机地放置。
3. 为弹幕元素设置一个left属性值,然后使用CSS3动画或JavaScript来使其移动。
4. 当弹幕元素到达右侧时,可以使用JavaScript将其从DOM中删除,或将其重新放回容器的左侧。
这就是实现最简单的视频弹幕效果的步骤。希望能对您有所帮助。
相关问题
js做一个简单的视频弹幕
实现视频弹幕功能的话,可以通过以下步骤进行:
1. 在 HTML 中创建一个 video 标签,设置视频地址以及宽高等属性。
2. 在 CSS 中设置 video 的样式,可以设置宽高、边框等。
3. 在 JavaScript 中编写弹幕逻辑:创建一个弹幕容器 div,设置其样式以及位置,并将其添加到视频容器中。然后根据用户输入的消息创建一个弹幕元素,设置其样式和位置,并将其添加到弹幕容器中。最后通过定时器实现弹幕的滚动效果。
具体的实现过程可以参考下面的代码示例:
HTML 代码:
```
<video src="video.mp4" width="640" height="360"></video>
```
CSS 代码:
```
video {
border: 1px solid #ccc;
}
.danmu-container {
position: relative;
width: 640px;
height: 360px;
overflow: hidden;
}
.danmu-item {
position: absolute;
white-space: nowrap;
font-size: 16px;
color: #fff;
text-shadow: 0 0 2px #000;
}
```
JavaScript 代码:
```
// 获取视频元素和弹幕容器
var video = document.querySelector('video');
var danmuContainer = document.createElement('div');
danmuContainer.className = 'danmu-container';
video.parentNode.insertBefore(danmuContainer, video.nextSibling);
// 添加弹幕
function addDanmu(text) {
var danmuItem = document.createElement('span');
danmuItem.textContent = text;
danmuItem.className = 'danmu-item';
danmuItem.style.top = Math.floor(Math.random() * (danmuContainer.offsetHeight - 30)) + 'px';
danmuItem.style.right = '-' + danmuItem.offsetWidth + 'px';
danmuContainer.appendChild(danmuItem);
// 弹幕滚动
var offset = danmuContainer.offsetWidth + danmuItem.offsetWidth;
danmuItem.style.transition = 'transform ' + (offset / 100) + 's linear';
danmuItem.style.transform = 'translateX(-' + offset + 'px)';
danmuItem.addEventListener('transitionend', function() {
danmuContainer.removeChild(this);
});
}
// 监听键盘事件,添加弹幕
document.addEventListener('keydown', function(e) {
if (e.keyCode == 13) {
var text = prompt('请输入弹幕内容:');
if (text) {
addDanmu(text);
}
}
});
```
这是一个简单的视频弹幕实现,具体的效果可以通过 CSS 调整。
js做一个简单的视频弹幕的代码
好的,请看以下代码:
```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` 函数,使这些弹幕动起来。