HTML+CSS+JavaScript制作弹幕效果 

全屏弹幕

20250323015255173-a22ca7ba38f86ba62773a4d14cd26033

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>弹幕效果</title>
    <style>
        /* 设置弹幕的样式 */
        .bullet {
            position: absolute;
            font-size: 20px;
            color: white;
            text-shadow: 1px 1px 1px black;
            white-space: nowrap;
            overflow: hidden;
        }
    </style>
</head>
<body>
<div id="container"></div>
<script>
    // 获取弹幕容器
    var container = document.getElementById('container');
    // 定义弹幕数据
    var data = [
        { text: '这是第一条弹幕', color: 'red' },
        { text: '这是第二条弹幕', color: 'green' },
        { text: '这是第三条弹幕', color: 'blue' }
    ];
    // 定义弹幕速度
    var speed = 2;
    // 定义弹幕间隔
    var interval = 1000;
    // 定义弹幕位置
    var topArr = [];
    for (var i = 0; i < 10; i++) {
        topArr.push(i * 30);
    }
    // 定义弹幕索引
    var index = 0;
    // 定义弹幕定时器
    var timer = setInterval(function() {
        // 获取弹幕数据
        var bullet = data[index];
        // 创建弹幕元素
        var span = document.createElement('span');
        span.className = 'bullet';
        span.innerText = bullet.text;
        span.style.color = bullet.color;
        // 随机获取弹幕位置
        var top = topArr[Math.floor(Math.random() * topArr.length)];
        span.style.top = top + 'px';
        // 将弹幕元素添加到容器中
        container.appendChild(span);
        // 计算弹幕宽度
        var width = span.offsetWidth;
        // 定义弹幕起始位置
        var left = container.offsetWidth;
        span.style.left = left + 'px';
        // 定义弹幕移动定时器
        var bulletTimer = setInterval(function() {
            // 计算弹幕当前位置
            left -= speed;
            span.style.left = left + 'px';
            // 判断弹幕是否移出容器
            if (left < -width) {
                // 移除弹幕元素
                container.removeChild(span);
                // 清除弹幕移动定时器
                clearInterval(bulletTimer);
            }
        }, 10);
        // 更新弹幕索引
        index++;
        if (index >= data.length) {
            index = 0;
        }
    }, interval);
</script>
</body>
</html>

盒子弹幕

20250323015437519-mmexport1742666052715

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Simple Danmaku Effect</title>
    <style>
        /*  danmaku容器的样式 */
        .danmaku-container {
            position: relative;
            height: 300px;
            background-color: black;
            color: white;
            font-size: 20px;
            overflow: hidden;
        }

        /* danmaku的样式 */
        .danmaku {
            position: absolute;
            top: 0;
            white-space: nowrap;
            opacity: 0.8;
        }
    </style>
</head>
<body>
<div class="danmaku-container"></div>
<script>
    // 函数用于创建新的弹库
    function createDanmaku(text) {
        // Create a new danmaku element
        var danmaku = document.createElement("div");
        danmaku.classList.add("danmaku");
        danmaku.innerText = text;

     //设置danmaku位置到容器的右边缘
        danmaku.style.right = "0";

        //设置danmaku顶部位置为0到容器高度之间的随机值
        var container = document.querySelector(".danmaku-container");
        danmaku.style.top = Math.floor(Math.random() * container.offsetHeight) + "px";

        //添加danmaku到容器
        container.appendChild(danmaku);

        //将danmaku动画到容器的左边缘
        var animationDuration = 5000; // 5 秒
        var danmakuWidth = danmaku.offsetWidth;
        var containerWidth = container.offsetWidth;
        var distance = containerWidth + danmakuWidth;
        var duration = (distance / containerWidth) * animationDuration;
        danmaku.style.transition = "transform " + duration + "ms linear";
        danmaku.style.transform = "translateX(-" + distance + "px)";

        // 动画完成后从容器中移除弹幕
        setTimeout(function() {
            danmaku.remove();
        }, duration);
    }

    // 函数生成随机弹库文本

 
    function generateDanmakuText() {
        var texts = ["Hello", "World", "Lorem", "Ipsum", "Dolor", "Sit", "Amet"];
        var index = Math.floor(Math.random() * texts.length);
        return texts[index];
    }

    // 每2秒生成一个新的弹幕
    setInterval(function() {
        var text = generateDanmakuText();
        createDanmaku(text);
    }, 2000);
</script>
</body>
</html>

视频弹幕

20250323015552300-mmexport1742666142831

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>弹幕效果</title>
    <style>
        #video-container {
            position: relative;
            width: 640px;
            height: 360px;
            margin: 0 auto;
        }
        #video {
            width: 100%;
            height: 100%;
        }
        #danmu-container {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }
        .danmu {
            position: absolute; /* 定位弹幕 */
            font-size: 24px; /* 设置字体大小 */
            white-space: normal; /* 防止换行 */
            color: white; /* 设置字体颜色 */
            text-shadow: 1px 1px 2px black; /* 添加文字阴影 */
            animation: move 10s linear forwards; /* 设置动画 移动   10秒  线性向前  向前 */
           
        }
        /*
        使用@keyframes 规则定义,指定动画名称move和动画的关键帧
        from:关键帧指定动画的的起始状态,即将弹幕元素向右平移其宽度的2500%。
        to:关键帧指定动画的结束状态,即将弹幕元素向左平移其宽度的100%。
        transform属性用于指定平移。
         */
        @keyframes move {
            from {
                transform: translateX(640px);
            }
            to {
                transform: translateX(-200%);
            }
        }

        .box1{
            display: flex; /*排成一行,并根据需要换行。*/
            justify-content: center; /*在主轴上居中对齐。*/
            margin-top: 40px;/*元素之间留出40像素的空间 */
        }
        /*
            弹幕输入框
        */
        .box1 .barrage-input{
            padding: 10px;   /*内边距*/
            font-size: 16px;  /*字体大小*/
            border-radius: 5px;  /* 边框圆角*/
            border: none;  /* 去掉边框*/
            box-shadow: 1px 1px 2px gray;  /* 添加阴影*/
        }
        /*
            弹幕提交按钮
        */
        .box1 .barrage-but{
            padding: 10px;  /* 内边距*/
            font-size: 16px;  /* 字体大小*/
            border-radius: 5px;  /* 边框圆角*/
            border: none;  /* 去掉边框*/
            box-shadow: 1px 1px 2px gray;  /* 添加阴影*/
            background-color: #4CAF50;  /* 背景颜色*/
            color: white;  /* 字体颜色*/

        }
    </style>
</head>
<body>
<div id="video-container">
    <video id="video" src="Docker.mp4" controls></video>
    <div id="danmu-container"></div>
</div>
<div class="box1">
    <input type="text" id="danmu-input" placeholder="请输入弹幕" class="barrage-input">
    <button id="danmu-send" class="barrage-but">发送</button>
</div>
<script>
    // 获取弹幕容器、输入框和发送按钮
    const danmuContainer = document.getElementById('danmu-container');
    const danmuInput = document.getElementById('danmu-input');
    const danmuSend = document.getElementById('danmu-send');

    // 给发送按钮添加点击事件监听器
    danmuSend.addEventListener('click', () => {
        // 创建一个新的div元素
        const danmu = document.createElement('div');
        // 添加danmu类
        danmu.classList.add('danmu');
        // 设置弹幕文本为输入框中的值
        danmu.innerText = danmuInput.value;
        // 将弹幕添加到弹幕容器中
        danmuContainer.appendChild(danmu);
        // 清空输入框
        danmuInput.value = '';

    });


</script>
</body>
</html>
🎀 🌸

📜 重要提示:
如有解压密码:看下载页、看下载页、看下载页。
源码工具资源类具有可复制性: 建议具有一定思考和动手能力的用户购买。
请谨慎考虑: 小白用户和缺乏思考动手能力者不建议赞助。
虚拟商品购买须知: 虚拟类商品,一经打赏赞助,不支持退款。请谅解,谢谢合作!
邻兔跃官网:lt.lintuyue.com(如有解压密码看下载页说明)。

文章版权声明 1、本网站名称:邻兔跃lT
2、本站永久网址:https://lt.lintuyue.com/
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 共2条

请登录后发表评论