这次给大家带来用H5的canvas做出弹幕效果,用H5的canvas做出弹幕效果的注意事项有哪些,下面就是实战案例,一起来看一下。
canvas知识
绘制文字
let canvas = document.getElementById('canvas');let ctx = canvas.getContext('2d');ctx.font = '20px Microsoft YaHei'; //字体、大小ctx.fillStyle = '#000000'; //字体颜色ctx.fillText('canvas 绘制文字', 100, 100); //文本,字体x,y坐标
文本宽度
ctx.measureText('文本宽度').width
清除绘制内容
ctx.clearRect(0, 0, width, height);
实现步骤
1、创建canvas元素利用绝对定位覆盖在视频上
2、创建Barrage类,添加的弹幕缓存到弹幕列表中,并记录相应弹幕信息
3、绘制弹幕文本,用文本偏移量控制移动速度
4、计算当文本超出画布时移出弹幕列表
代码
//html<div style=position:relative;width:500px;height:400px;text-align:center;>
<video controls=controls autoplay=autoplay style=width:100%;height:100%;>
<source src=http://www.w3school.com.cn/i/movie.ogg type=video/ogg />
<source src=http://www.w3school.com.cn/i/movie.mp4 type=video/mp4 />
Your browser does not support the video tag.
</video>
<canvas id=canvas width=500 height=400 style=position:absolute;top:0;left:0;>
您的浏览器不支持canvas标签。
</canvas>
</div>//js(function () { class Barrage {
constructor(canvas) {
this.canvas = document.getElementById(canvas);
let rect = this.canvas.getBoundingClientRect();
this.w = rect.right - rect.left;
this.h = rect.bottom - rect.top;
this.ctx = this.canvas.getContext('2d');
this.ctx.font = '20px Microsoft YaHei';
this.barrageList = [];
} //添加弹幕列表
shoot(value) {
let top = this.getTop();
let color = this.getColor();
let offset = this.getOffset();
let width = Math.ceil(this.ctx.measureText(value).width);
let barrage = {
value: value,
top: top,
left: this.w,
color: color,
offset: offset,
width: width
}
this.barrageList.push(barrage);
} //开始绘制
draw() { if (this.barrageList.length) {
this.ctx.clearRect(0, 0, this.w, this.h); for (let i = 0; i < this.barrageList.length; i++) {
let b = this.barrageList[i]; if (b.left + b.width <= 0) {
this.barrageList.splice(i, 1);
i--; continue;
}
b.left -= b.offset;
this.drawText(b);
}
}
requestAnimationFrame(this.draw.bind(this));
} //绘制文字
drawText(barrage) {
this.ctx.fillStyle = barrage.color;
this.ctx.fillText(barrage.value, barrage.left, barrage.top);
} //获取随机颜色
getColor() { return '#' + Math.floor(Math.random() * 0xffffff).toString(16);
} //获取随机top
getTop() { //canvas绘制文字x,y坐标是按文字左下角计算,预留30px
return Math.floor(Math.random() * (this.h - 30)) + 30;
} //获取偏移量
getOffset() { return +(Math.random() * 4).toFixed(1) + 1;
}
}
let barrage = new Barrage('canvas');
barrage.draw(); const textList = ['弹幕', '666', '233333333',
'javascript', 'html', 'css', '前端框架', 'Vue', 'React', 'Angular','测试弹幕效果'
];
textList.forEach((t) => {
barrage.shoot(t);
})
})();
相信看了本文案例你已经掌握了方法,更多精彩请关注云资源网其它相关文章!
推荐阅读:
前端开发中的SVG动画
canvas怎样做出黑色背景带特效碎屑烟花
以上就是用H5的canvas做出弹幕效果的详细内容,更多请关注云资源网其它相关文章!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
云资源网 » 用H5的canvas做出弹幕效果
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
云资源网 » 用H5的canvas做出弹幕效果
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 你们有qq群吗怎么加入?