<!DOCTYPE html>
<html>
<head>
    <title>HTML5 视频弹幕播放器</title>
    <meta name='description' content='学习如何使用 HTML、CSS 和 JavaScript 创建带弹幕功能的视频播放器。本教程提供详细代码示例和解释,助你快速上手。'>
    <meta name='keywords' content='HTML5, 视频播放器, 弹幕, JavaScript, CSS, 前端开发'>
    <style>
        .video-container {
            position: relative;
            width: 640px;
            height: 360px;
        }
        .video-player {
            width: 100%;
            height: 100%;
        }
        .danmu-container {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            pointer-events: none;
            overflow: hidden;
        }
        .danmu {
            position: absolute;
            font-size: 16px;
            color: white;
            pointer-events: auto;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
    </style>
</head>
<body>
    <div class='video-container'>
        <video id='videoPlayer' class='video-player' controls>
            <source src='video.mp4' type='video/mp4'>
            您的浏览器不支持视频播放。
        </video>
        <div class='danmu-container'></div>
    </div>
<pre><code>&lt;script&gt;
    const videoPlayer = document.getElementById('videoPlayer');
    const danmuContainer = document.querySelector('.danmu-container');

    // 监听视频播放时间更新事件
    videoPlayer.addEventListener('timeupdate', function() {
        const currentTime = videoPlayer.currentTime;
        const danmus = getDanmusByTime(currentTime);
        
        // 清空弹幕容器
        danmuContainer.innerHTML = '';

        // 在弹幕容器中创建和展示弹幕
        danmus.forEach(function(danmu) {
            const danmuElement = document.createElement('div');
            danmuElement.classList.add('danmu');
            danmuElement.innerText = danmu.text;
            danmuElement.style.top = danmu.top + 'px';
            danmuElement.style.color = danmu.color;

            danmuContainer.appendChild(danmuElement);

            // 计算弹幕移动的距离
            const distance = danmuContainer.offsetWidth + danmuElement.offsetWidth;

            // 设置弹幕动画
            danmuElement.animate([
                { transform: 'translateX(100%)' },
                { transform: 'translateX(-' + distance + 'px)' }
            ], {
                duration: 8000,  // 弹幕移动的时间
                easing: 'linear',  // 弹幕匀速移动
                delay: danmu.delay,  // 弹幕出现的延迟时间
                fill: 'forwards'  // 弹幕动画结束后保持最后的位置
            });
        });
    });

    // 模拟从服务器获取某个时间点的弹幕数据
    function getDanmusByTime(time) {
        // 这里需要根据实际情况替换为从服务器获取弹幕数据的逻辑
        const danmus = [
            { text: '弹幕1', top: 50, color: 'white', delay: 1000 },
            { text: '弹幕2', top: 100, color: 'red', delay: 2000 },
            { text: '弹幕3', top: 150, color: 'blue', delay: 3000 },
            { text: '弹幕4', top: 200, color: 'green', delay: 4000 }
        ];

        return danmus.filter(function(danmu) {
            return danmu.delay &lt;= time * 1000;  // 过滤出已经出现的弹幕
        });
    }
&lt;/script&gt;
</code></pre>
</body>
</html>
HTML5 视频弹幕播放器实现教程

原文地址: https://www.cveoy.top/t/topic/0FX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录