0

0

实例详解CSS3 实现弹幕

小云云

小云云

发布时间:2018-05-15 14:21:04

|

2894人浏览过

|

来源于php中文网

原创

项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到卡顿的感觉。用jquery的animate动画在移动设备上有明显的卡顿。本文主要介绍了css3 实现弹幕的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

1.首先创建弹幕区域

2.css

.webPage .barrage{width:100%;height:22%;position: absolute; bottom: 50px; 
background-color: transparent;pointer-events: none;
}
.webPage .barrage .mask{width:100%;height:100%;background:transparent;z-index:100;}

注:以上html,css根据自己需求来即可

3.js

立即学习前端免费学习笔记(深入)”;

$scope.data = {comment:''};
$scope.danmuCount = 5; //最大弹幕行数
$scope.danmus = ['1545466666还是','9777777','哈哈哈哈哈','对企业读完后环球网好齐齐哈','42115我我我5','556噢噢噢噢45','54哦','54545646','666但近段时间66','56565','454465465565', '1545466666还是','9777777','哈哈哈哈哈','对企业读完后环球网好齐齐哈','42115我我我5','556噢噢噢噢45','54哦','54545646','666但近段时间66','56565','454465465565']; //弹幕数据源

//创建弹幕区域
$scope.createDanmuContent = function () {
var height = 1 / $scope.danmuCount * 100 + '%';
for (var i = 0; i < $scope.danmuCount; i++) {
var item = '

'; $('.mask').append(item); } $scope.createDanmu (); }; //开始弹幕绘制 $scope.createDanmu = function () { var maxCount = 0; if ($scope.danmus.length > $scope.danmuCount) { maxCount = $scope.danmuCount; } else { maxCount = $scope.danmus.length; } var _left = window.screen.width; for (var i = 0; i < maxCount; i++) { var _lable = $("

"+$scope.danmus[i]+"

"); $(".mask p").each(function () { //检测该区域是否绘制了弹幕 if ($scope.checkDanmu($(this))) { $(this).append(_lable); $scope.moveArray(i); i--; return false; } }); } $scope.init_barrage(); }; //将数组第一位放到最后一位,(因弹幕池内容太少,所以没删除已显示的弹幕) $scope.moveArray = function (i) { var temp = $scope.danmus[i]; $scope.danmus.splice(i,1); $scope.danmus.push(temp); } //判断content区域有没有弹幕 $scope.checkDanmu = function (el) { return el.find('p').length == 0 ? true : false; }; //获取随机颜色 $scope.getRandomColor = function () { return '#' + (function(h){ return new Array(7 - h.length).join("0") + h })((Math.random() * 0x1000000 << 0).toString(16)) }; //初始化弹幕参数 $scope.init_barrage = function () { $(".mask p p").show().each(function() { var _moveLeft = window.screen.width+$(this).width(); var time = 100000 / $(this).width() + 5000;//弹幕滑动时间 $scope.addCssAnimate($(this),_moveLeft,time); }); }; //添加弹幕动画 $scope.addCssAnimate = function (el,_moveLeft,time) { el.css({ 'transform':'translateX('+-_moveLeft+'px)', 'transition':'all '+time+'ms'+ ' linear', '-webkit-transform':'translateX('+-_moveLeft+'px)', '-webkit-transition':'all '+time+'ms'+ ' linear', '-moz-transform':'translateX('+-_moveLeft+'px)', '-moz-transition':'all '+time+'ms'+ ' linear', '-ms-transform':'translateX('+-_moveLeft+'px)', '-ms-transition':'all '+time+'ms'+ ' linear' }); //当动画执行完毕后,将弹幕移到原处,更换弹幕文字,重新开始执行动画,相当于对原本弹幕的复用 $timeout(function () { //判断弹幕池是否还有内容,如果没有则移除弹幕 if ($scope.danmus.length > 0) { el.css({ 'transform':'translateX(0px)', 'transition':'all 0ms linear', '-webkit-transform':'translateX(0px)', '-webkit-transition':'all 0ms linear', '-moz-transform':'translateX(0px)', '-moz-transition':'all 0ms linear', '-ms-transform':'translateX(0px)', '-ms-transition':'all 0ms linear' }); $scope.resetAnimate(el); } else { el.remove(); } },time); }; //更换弹幕内容,重新开始弹幕动画 $scope.resetAnimate = function (el) { el.html($scope.danmus[0]); $scope.moveArray(0); var _moveLeft = el.width() + screen.width; var time = 100000 / el.width() + 5000; $scope.addCssAnimate(el,_moveLeft,time); }; //评论,添加弹幕 $scope.addDanmu = function () { var text = $scope.data.comment; if(text == ""){ return; } $scope.danmus.unshift(text); }; $scope.createDanmuContent();

至此,功能基本实现了。要关闭弹幕只需移除弹幕的区域,文中就没有写了。

逻辑:首先根据$scope.danmuCount来创建弹幕的行数,然后在每行里面添加弹幕,并添加相应的动画。当一个动画执行完毕后,将弹幕移回原处,更换弹幕内容,重新执行动画,这样避免了弹幕重叠。每条弹幕动画执行时间是根据弹幕长度决定的。

NatAgent
NatAgent

AI数据情报监测与分析平台

下载

个人经验,希望大家指出不足。上述代码使用的angularjs,但逻辑都是一样

相关推荐:

HTML5文字弹幕效果

微信小程序之弹幕的代码实现

html5游戏开发-弹幕+仿雷电小游戏demo

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

4

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

1

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

18

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 5万人学习

HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.8万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 9.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号