您现在的位置是:网站首页> 编程资料编程资料
CSS3 实现弹幕的示例代码前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)css3实现蒙版弹幕功能
2023-10-21
214人已围观
简介 本篇文章主要介绍了CSS3 实现弹幕的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
最近需要项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到卡顿的感觉。用jquery的animate动画在移动设备上有明显的卡顿。
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 div").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 div 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来创建弹幕的行数,然后在每行里面添加弹幕,并添加相应的动画。当一个动画执行完毕后,将弹幕移回原处,更换弹幕内容,重新执行动画,这样避免了弹幕重叠。每条弹幕动画执行时间是根据弹幕长度决定的。
个人经验,希望大家指出不足。上述代码使用的angularjs,但逻辑都是一样
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- CSS利用pointer-events防止重复点击的方法实例详解CSS pointer-events属性的使用css3 pointer-events 介绍详解使用CSS的pointer-events属性实现鼠标穿透效果的神奇技巧css中pointer-events属性详解CSS的pointer-events属性详细介绍(作用和注意事项)css pointer-events属性实现下面元素可点击css不常见属性之pointer-events的使用方法
- 浅谈CSS3特性查询(Feature Query: @supports)功能简介css3中transform属性实现的4种功能详解CSS3.0(Cascading Style Sheet) 层叠级联样式表纯CSS3实现div按照顺序出入效果CSS3实现列表无限滚动/轮播效果css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效CSS3实现的侧滑菜单CSS3实现的3D隧道效果用CSS3画一个爱心css3 实现文字闪烁效果的三种方式示例代码六种css3实现的边框过渡效果
- CSS优先级计算的规则css优先级计算方法(推荐)详解CSS中的选择器优先级顺序详解CSS中的选择器优先级及样式层叠问题解决CSS z-index 层级关系优先级的概念CSS优先级的两种理解方式
- css3旋转木马_动力节点Java学院整理 HTML5+css3:3D旋转木马效果相册
- css3边框_动力节点Java学院整理 css3图片边框border-image的用法CSS3实现内凹圆角的实例代码CSS3圆角边框和边界图片效果实例 CSS3实现多重边框的方法总结详解CSS3的box-shadow属性制作边框阴影效果的方法详解CSS的border边框属性及其在CSS3中的新特性6种非常炫酷的CSS3按钮边框动画特效深入浅析css3 border-image边框图像详解Css3圆角边框制作代码css3圆角边框和边框阴影示例
- 使用 css3 实现圆形进度条的示例css 进度条的文字根据进度渐变的示例代码利用css3实现进度条效果及动态添加百分比css 横向进度条和竖向进度条实现代码利用CSS3实现进度条的两种姿势详解使用CSS实现阅读进度条css 实现圆形渐变进度条效果的示例代码
- 全民飞机大战情人节活动来袭_情人节活动一览_手机游戏_游戏攻略_
- 全民飞机大战葫芦侠叉叉刷分最新教程攻略_手机游戏_游戏攻略_
- 全民飞机大战刷金币刷分技巧_2月13日叉叉助手辅助教程攻略_手机游戏_游戏攻略_
- 全民飞机大战拍大师手机版录制视频方法_游戏录视频教程_手机游戏_游戏攻略_