此文档描述了当前开发者实现弹幕的方式,并且提出一个新的 Web 接口以在浏览器中更轻便地实现弹幕功能。
这是一份进行中的提案草稿。欢迎参加 W3C 弹幕社区组关于弹幕的相关讨论。
本文档使用了如下术语:
当前开发者实现弹幕主要有如下两种方式:
clearRect方法清空画布、计算弹幕在下一帧的位置、在新位置绘制弹幕。如:<div>danmaku</div>transform 和 transition 两个 CSS 属性的作用下向左运动。如:transform 属性设为当前位置,同时把 transition 属性时间设为 0,就实现了把弹幕固定在当前位置。如:性能较好,配合WebGL可以提升应用性能,同时可以同时显示大量的弹幕文字。
不够灵活,显示文字+图像的弹幕比较麻烦;对单独某条弹幕进行暂停比较繁琐。同时在移动设备上需要考虑Canvas分辨率的问题,比如文字发虚等。
简单灵活,可以通过DOM绘制丰富的弹幕样式,比如图像和文字的组合。用户可以单独暂停某一个感兴趣的弹幕。
弹幕较多时会生成的大量的DOM,消耗更多的内存,容易导致页面卡顿。同时需要对弹幕展示进行特定的优化,比如在弹幕消失,需要删除对应的DOM。
本章的内容仍在媒体和娱乐兴趣组讨论,如果您有任何问题或内容更正,您可以在本文档的 GitHub 库中发一个新 issue 或发送电子邮件至 public-web-and-tv@w3.org。
弹幕采用全新的标签元素bulletchatlist和bulletchat,新增的弹幕标签元素不是video或者audio等元素的子元素。从“使用场景”可以看到,弹幕不仅只是和视频等媒体元素有关联,在“Web页面”或者“互动上墙”等场景下弹幕是独立作为页面的一部分存在,不依赖于视频等元素。
弹幕规范描述了弹幕绘制方式,不包括外部列表。由于弹幕不依赖于video,因此不要求有弹幕列表。在常见的点播视频弹幕场景中,往往有一个类似[[webvtt1]]这样同步视频时间轴的弹幕列表,
这种情况需要由开发者根据视频时间添加bulletchat。
bulletchatlist 为块元素,bulletchat 为行内元素。bulletchat 元素允许嵌套内容内容包括:文本、图片、超链接。
area:定义弹幕显示区域占 bulletchatlist 总高度的百分比,范围 0-100,50为半屏,100为满屏。滚动弹幕、顶部弹幕、逆向滚动显示区域从 bulletchatlist 顶部开始计算,底部弹幕显示区域从 bulletchatlist 底部开始计算。allowOverlap:定义超出显示区域的弹幕是否允许重叠。false表示不展示超出显示区域弹幕,true则表示超出显示区域弹幕会进行重叠展示。
mode:定义弹幕类型,可选值为scroll、top、bottom以及reverse。
scroll 为默认值,表示滚动弹幕。弹幕会从左往右进行滚动,滚动时间由CSS
属性bulletchat-duration控制。显示时间规则为:bulletchat元素的最左侧进入bulletchatlist元素显示区域到
bulletchat元素最右侧从bulletchatlist元素显示区域消失所消耗的时间。
top 表示顶部弹幕。
bottom 表示底部弹幕。
reverse 表示逆向滚动弹幕。弹幕会从右往左进行滚动,滚动时间与scroll类似。
bulletchatstart:弹幕动画开始时触发。bulletchatend:弹幕动画结束时触发。bulletchatcancel:弹幕意外终止时触发,如弹幕被移除或被隐藏,或因为超出显示区域不被展示。bulletchat-play-state:running | paused,定义弹幕状态为运行或暂停,可继承。bulletchat-duration:<time>,单位为秒(s)或者毫秒(ms),定义弹幕播放速度,可继承。bulletchat-play-state:running | paused,定义弹幕状态为运行或者暂停,可继承。bulletchat-duration:<time>,单位为秒(s)或者毫秒(ms),定义弹幕播放速度,可继承。bulletchat-delay:<time>,单位为秒(s)或者毫秒(ms),定义弹幕动画于何时开始,定义一个负值可以实现一个弹幕从中间开始运动。