Code前端首页关于Code前端联系我们

Canvas实现弹幕效果和扩展功能

terry 2年前 (2023-09-27) 阅读数 75 #数据结构与算法

3。 Canvas实现水坝

除了通过CSS实现水坝的方法之外,还可以用canvas来实现水坝。

实现对画布的渗透的原理是时不时地重绘文字。让我们一步一步来做。

  • 获取布料
    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');
复制代码
  • 绘制文字
    ctx.font = '20px Microsoft YaHei';          
    ctx.fillStyle = '#000000';                
    ctx.fillText('canvas 绘制文字', x, y);
复制代码
上面的fillText就是实现弹幕效果的主要api,其中x表示横方向的坐标,y表示纵方向的坐标,只要时时的改变x,y进行重绘,就可以实现动态的弹幕效果。
复制代码
  • 清晰绘图内容
    ctx.clearRect(0, 0, width, height);
复制代码
  • 具体实现

使用定时器定期更改x,y。每次改变之前,先清屏,然后根据改变的x、y重新绘制。当有多个括号时,指定:

    let colorArr=_this.getColor(color);  弹幕数组多对应的颜色数组
    let numArrL=_this.getLeft();  弹幕数组所对应的x坐标位置数组
    let numArrT=_this.getTop();  弹幕数组所对应的y坐标位置数组
    let speedArr=_this.getSpeed(); 弹幕数组所对应的弹幕移动速度数组
复制代码

定时重画操作为:

_this.timer=setInterval(function(){
    ctx.clearRect(0,0,canvas.width,canvas.height);
    ctx.save();
    for(let j=0;j<barrageList.length;j++){
      numArrL[j]-=speedArr[j];
      ctx.fillStyle = colorArr[j]
      ctx.fillText(barrageList[j],numArrL[j],numArrT[j]);
      ctx.restore();
 },16.7);
复制代码

达到的效果为:canvas实现弹幕效果及扩展功能

4。帆布坝的扩展功能

通过织物制作坝坝方式对于扩展功能非常方便,例如停止坝的滚动。此外,还可以为水坝添加头像、为每个水坝添加边框等稍后添加的功能。

最后是一个简单的响应式水坝组件; https://github.com/forthealllight/react-barrage

作者:yuxiaoliang
链接:https://juejin.im/post/5b44112cf265da0fa42cc04e来源: 如需商业转载,请联系作者以获得许可。非商业转载请注明出处。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门