用canvas实现的弹幕效果

学习网址:https://www.zhangxinxu.com/wordpress/2017/09/html5-canvas-video-barrage/

它写的功能和很全面,我只用到了其中的一点点。大家可以好好去看一看。
使用之前要先导入一个js文件:(具体内容可去参考上面的网址)

 <script src="js/canvasBarrage.js"></script>
/************************  弹幕效果  *************************/
// 弹幕数据
var dataBarrage = [{
    value: 'I will never,ever regret the things I\'ve done. Because most days,all you have are places in your memory that you can go to. ',
    time: 20, // 单位秒
    speed: 3
}, {
    value: '我只想做一个和红裙子女孩儿刚刚听完音乐会的男人。',
    color: 'blue',
    time: 2
}, {
    value: 'BGM好棒,哪里玛丽苏了?就因为男主有钱人又帅就玛丽苏了?近乎全瘫的人怎么就玛丽苏了?!',
    time: 3.2
}, {
    value: '如果她跟他真结了婚,生几个孩子,满脸褶皱地碎碎叨叨地后悔和埋怨,那一定不会是个故事了。',
    time: 17,
    color: '#FF33CC'
}, {
    value: '我不明白短评里那些打一两星的人群嘲他人的哭点,是显示自己的优越感,还是强而有力?',
    time: 5.0
}, {
    value: '我也舍不得男主…龙母眉毛全是戏',
    time: 6.3
}, {
    value: '是为了让视频尺寸不至于过大',
    time: 7.8
}, {
    value: '省流量',
    time: 8.5,
    color: '#e64c66'
}, {
    value: '我sam真是美颜盛世…',
    time: 9,
    color: '#742c1b'
}, {
    value: '对于安乐死问题讨论的电影这并不是第一次,曾获得奥斯卡最佳外语片的《深海长眠》算是一部经典',
    time: 25,
    color: '#f43e1a'
}, {
    value: '我发现我真的对外国人脸盲,我看过权游和加勒比海盗4,然而既没有认出来龙妈',
    time: 11,
    speed: 2,
    color: 'blue'
}, {
    value: '虽然大黄蜂紧身裤不优雅,但它的出场是爱情加梦想属性的,不是时尚属性',
    time: 13
}, {
    value: 'live boldly, push yourself, don\'t settle',
    time: 14,
    color: 'blue'
}, {
    value: '内容不错哦!',
    time: 18,
    color: 'yellow'
}];

// 初始化弹幕方法
var eleCanvas = document.getElementById('canvasBarrage');
var showBarrage = new CanvasBarrage(eleCanvas, video, {
    data: dataBarrage
});

$(function () {
    var $canvasWarp = $(".canvas-barrage-wrap");

    //开启 / 关闭弹幕
    $(".barrage-icon").click(function () {
        if ($(this).attr("title") == "开启弹幕") { //当前状态为 关闭
            $canvasWarp.show();
        } else { //当前状态为 开启
            $canvasWarp.hide();
        }
        $(this).hide().siblings("img").show();
    });

   
    var myBarrage = $('#inputMyBarrage');  //弹幕输入框
    var sendBtn = $(".send-btn");  //发送按钮
    var colors = ["#f43e1a", "#e4f21c", "#2538e9", "#9520ee", "pink"];
	//点击发送按钮
    sendBtn.on('click', function (event) {
        var randomColor = parseInt(Math.random() * colors.length);

        // 新增弹幕
        showBarrage.add({
            value: $('#inputMyBarrage').val(),
            time: video.currentTime,
            color: colors[randomColor],
            fontSize: 20
        });
		//清空弹幕输入框
        myBarrage.val('');
    });

    //回车时也能发送弹幕
    $(document).keyup(function (event) {
        if (event.keyCode == 13) {
            sendBtn.trigger("click");
        }
    });

});
要在Canvas实现弹幕效果,可以按照以下步骤进行操作: 1. 创建一个Canvas元素,并使用绝对定位将其覆盖在视频上方。可以使用HTML中的<canvas>标签,通过设置宽度和高度来确定Canvas的大小。 2. 在JavaScript中创建一个Barrage类,该类用于存储弹幕对象并记录相应的弹幕信息。可以使用一个数组来存储弹幕对象。 3. 在Barrage类中,绘制弹幕文本。你可以使用Canvas的绘制文本方法(如fillText)来将弹幕文本绘制在Canvas上。可以设置文本偏移量来控制弹幕的移动速度。 4. 在定时器中,更新弹幕的位置并重新绘制Canvas上的所有弹幕内容。你可以使用一个循环来遍历弹幕数组,更新每个弹幕的X坐标。然后使用Canvas的绘制文本方法将更新后的弹幕绘制在Canvas上。 5. 当弹幕文本超出Canvas范围时,从弹幕数组中移除该弹幕。 下面是一个简单的实现示例: ```javascript let canvas = document.getElementById('canvas'); let ctx = canvas.getContext('2d'); ctx.font = '24px Verdana'; class Barrage { constructor(text, x, y, speed, color) { this.text = text; this.x = x; this.y = y; this.speed = speed; this.color = color; } } let barrageList = [ new Barrage('弹幕1', 2000, 24, 1, 'red'), new Barrage('弹幕2', 1900, 48, 3, 'pink'), // 其他弹幕... ]; function updateBarrage() { ctx.clearRect(0, 0, canvas.width, canvas.height); for (let i = 0; i < barrageList.length; i++) { let barrage = barrageList[i]; barrage.x -= barrage.speed; ctx.fillStyle = barrage.color; ctx.fillText(barrage.text, barrage.x, barrage.y); if (barrage.x < -300) { barrage.x = 2000; } } } setInterval(updateBarrage, 1000 / 60); ``` 在HTML中,你可以放置一个`<div>`元素并在其中嵌入上述Canvas元素: ```html <div> <canvas id="canvas" width="2000" height="240"></canvas> </div> ``` 这样,你就可以在Canvas实现弹幕效果了。这个示例中的弹幕将从右侧向左侧移动,并循环播放。你可以根据需要进行调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用canvas如何实现发送视频弹幕,H5 Canvas学习](https://blog.csdn.net/wzsud/article/details/122270259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Canvas弹幕实现](https://blog.csdn.net/z69183787/article/details/105391669)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [canvas画布的方式实现弹幕](https://blog.csdn.net/wuyoulv/article/details/128639020)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值