实现弹幕效果的方法总结(css和canvas)


当前第2页 返回上一页

我们想仅仅通过translateX来确定弹幕节点的初始位置,但是translateX(-100%)是相对于弹幕节点本身的,而不是相对于父元素,因此我们耦合js和css,在js中获取弹幕节点所在的父元素的宽度,接着根据宽度来定义弹幕节点的初始位置。

以父元素为body时为例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//css

 .block{

  position:absolute;

  left:0;

  visibility:hidden;

  /* other decorate style */

  animation:barrage 5s linear 0s;

}

//js

let style = document.createElement('style');

document.head.appendChild(style);

let width = window.innerWidth;

let from = `from { visibility: visible; -webkit-transform: translateX(${width}px); }`;

let to = `to { visibility: visible; -webkit-transform: translateX(-100%); }`;

style.sheet.insertRule(`@-webkit-keyframes barrage { ${from} ${to} }`, 0);

除了耦合js计算了父元素的宽度,从而确定弹幕节点的初始位置之外,这里在弹幕节点中我们为了防止初始位置就有显示,增加了visibility:hidden属性。防止弹幕节点在未确定初始位置时就显示在父容器内。只有弹幕开始从初始位置滚动,才会变得可见。

但是这种css的实现方式,在实现弹幕的扩展功能方面比较麻烦,比如如何控制弹幕暂停等等。

3. canvas实现弹幕

除了通过css实现弹幕的方法之外,通过canvas也可以实现弹幕。

通过canvas实现弹幕的原理就是时时的重绘文字,下面来一步步的实现。

  • 获取画布

    let canvas = document.getElementById('canvas');
    let ctx = canvas.getContext('2d');

  • 绘制文字

1

2

3

4

5

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进行重绘。当存在多条弹幕的情况下,定义:

1

2

3

4

let colorArr=_this.getColor(color);  弹幕数组多对应的颜色数组

let numArrL=_this.getLeft();  弹幕数组所对应的x坐标位置数组

let numArrT=_this.getTop();  弹幕数组所对应的y坐标位置数组

let speedArr=_this.getSpeed(); 弹幕数组所对应的弹幕移动速度数组

定时的重绘弹幕函数为:

1

2

3

4

5

6

7

8

9

_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);

实现的效果为:

2088679556-5b4417cfe64dc_articlex.gif

4. canva弹幕的扩展功能

通过canvas实现弹幕的方式,很方便做比如暂停弹幕滚动等扩展功能,此外,也可以给弹幕增加头像,给每条弹幕增加边框等等功能,以后再补充。

相关推荐:

H5微信支付之引入微信的js-sdk包失败的解决方法

使用h5 canvas实现时钟的动态效果

以上就是实现弹幕效果的方法总结(css和canvas)的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

css如何设置文字加粗

css怎么取消边框

如何定义项目列表css

css设置背景颜色

深入浅析css中的数学表达式calc()

推荐一个chrome devtools实用小插件:css overview panel

css怎么设置图片的透明度

css中id选择器的命名规则有哪些

在css中不属于添加在当前页面的形式是什么

css中隐藏元素的方法有哪些?有什么区别?

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...