代码地址如下:
http://www.demodashi.com/demo/11595.html

弹幕小Demo实例地址,点击看效果

写在前面:尝试做了一下弹幕的实例,欢迎提出并指正问题

问题说明:

Demo中页面展示如下图所示:



如果图片挂了,请看文字说明:

简单的说弹幕只完成了一个功能,从右向左缓慢移动

Demo中所涉及到的文字参数说明如下:

  • 行走translateX= 屏幕宽度+弹幕宽度 + 70
  • 行走时间:屏幕宽度/50(初始时间)+弹幕宽度/500
  • 批次间隔时间:Math.min(初始时间/2,4200)
  • 移除条件:left<-(70+20)

ps:以上数字为自定的,无组织无规律,也可在对话框中设定更加无组织无纪律的数字,设定时请不要带单位,并没有做正则匹配也没有做兼容

未解决问题:

  • 弹幕重叠问题:当弹幕不定长时,弹幕是按照一定时间通过setInterval来批次放出,而不是当前一个结束划入屏幕之后,后一个再出现,如果可以判定当前什么时候在屏幕内滑到什么位置,就可以准确放出后一个弹幕,这样避免了弹幕重叠,如果给弹幕设定长则可一定程度上避免重叠。
  • 批次时间间隔设定问题:时间间隔设定较长,则避免长弹幕重叠,但短弹幕空白太大,时间间隔设定过短则长弹幕重叠,问题和上一个类似,如何在弹幕不定长时批次相隔紧凑且不重叠,这两个遇到的问题目前都没有解决

代码说明:

/*
*弹幕调用:Barrage.danMuInit(aqueue);
*弹幕插入:Barrage.danMuInsert(aqueue,data);
*aqueue=[{'img':xx,'content':xx}] data={'img':xx,'content':xx}
*/
var config = {
init_time:'',//屏幕内滑动时间
interval_time:'',//批次间隔时间
line:'',//弹幕分行
liWidth:'',//弹幕限宽
}
var Barrage = {
left:document.documentElement.clientWidth,
translateX:document.documentElement.clientWidth||0,
fontSize:'12',
color:'#000',
line:'',//弹幕所分行数
top:[],//弹幕分行时绝对定位top值
init_time:'',//弹幕屏内滑动时间
interval_time:'',//弹幕每批出现间距时间
timeCacluate:'',//弹幕暂停
liWidth:'',//强制设置liwidth
danMuInit:function(data){
var self = this;
self.top = [];
self.line = parseInt(config.line)||3;
self.init_time = parseInt(config.init_time)||document.documentElement.clientWidth/50;
self.interval_time = parseInt(config.interval_time)||Math.min(self.init_time*1000/2,4200);
for(var i = 0 ;i < self.line;i++){
self.top.push(''+i*30+'px');
};
self.liWidth = parseInt(config.liWidth); self.danMuPlay(aqueue);
},
danMuPlay:function(data){
if(typeof(data)=='underined'){return;}
var self = this;
var strLength = 0;
var strWidth = 0;
var add_time = 0;//与init_time共同构成行走时间 self.timeCacluate = setInterval(function(){
var arr = [];
for(var x = 0;x<self.top.length&&data.length > 0;x++){
arr.push('<li data-type="'+data[0].type+'" data-mid="'+data[0].source_id+'" style="position: absolute;left:'+self.left+'px;top:'+self.top[x]+';display: inline-block;white-space: pre;">');
arr.push('![]('+data[0].img+')');
arr.push('<span>'+data[0].content+'</span>');
arr.push('</li>');
//重复播放时数据填充
var t = data.shift();
bqueue.push(t); };
$('.j_barrage').find('ul').append(arr.join(''));
$('.j_barrage').find('ul span').css('width',''+self.liWidth+'px');
var liWidth = 0;//此li用于非定宽时存储每个li宽度
var liLength = $('.j_barrage').find('ul').children().length; for(var j = 0;j < liLength;){
for(k = 0;k<self.top.length&&j < liLength;k++){
liWidth = $('.j_barrage').find('li').eq(j).width();
add_time = liWidth/500;
$('.j_barrage').find('li').eq(j).css({
'transform':'translateX(-'+(self.left+liWidth+70)+'px)',
'left':''+self.left+'px' ,
'transition':'transform '+(self.init_time+add_time)+'s linear'
});
j++; }
}
if(data.length == 0){
self.danMuPause();
}
},self.interval_time)
self.danMuClear();
},
danMuInsert:function(queue,data){
var self = this;
var img = 'http://tva1.sinaimg.cn/default/images/default_avatar_male_50.gif';
setTimeout(function(){
queue.unshift({'img':img,'content':data.content});
if(queue.data == ''){
self.danMuPlay(queue);
}
},2000);
},
danMuClear:function(){
var clearLi = setInterval(function(){
for(var i = 0;i<$('.j_barrage').find('ul').children().length;i++){
if($('.j_barrage').find('ul').children().eq(i).offset().left<-90){
console.log('remove')
$('.j_barrage').find('ul').children().eq(i).remove();
}
}
},1000)
},
danMuPause:function(){
var self = this;
clearInterval(self.timeCacluate);
}
};

运行效果图

代码文件截图

单一一个文件:

ps:弹幕后场区……写错字了(弹幕候场区)……移动端页面弹幕小Demo实例说明

代码地址如下:
http://www.demodashi.com/demo/11595.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

移动端页面弹幕小Demo实例说明的更多相关文章

  1. RPC框架学习+小Demo实例

    一.什么是RPC协议? 全称:远程过程调度协议 效果:使消费者向调用本地方法一样调用远程服务方法,对使用者透明 目前常用:Dubbo.Thirft.Sofa.... 功能: 建立远程通信(socket ...

  2. webpack+vue+vueRouter模块化构建小demo实例超详细步骤(附截图、代码、入门篇)

    说明:本demo使用yarn代替npm指令来下载一系列依赖,有详细指令说明:使用WebStorm下Terminal来输入指令: >开始(确认已经安装node环境和yarn包管理工具) 1.新建项 ...

  3. 微信移动端web页面调试小技巧

    技术贴还是分享出来更加好,希望能对一些朋友有帮助,个人博客  http://lizhug.com/mymajor/微信移动端web页面调试小技巧

  4. 一周一个小demo — 前端后台的交互实例

    这一周呢,本K在大神的指导下,完成了一个利用ajax与php文件上传处理相结合的一个留言板功能的小实例,下面就让本K来带大家瞅瞅如何实现这一种功能. 一.界面概览 首先我们来看一下这个小demo的具体 ...

  5. swiper嵌套小demo(移动端触摸滑动插件)

    swiper(移动端触摸滑动插件) tip:自己敲得Swiper 的小demo,可以复制粘贴看看效果哦. swiper的js包css包下链接地址 :  https://github.com/Clear ...

  6. Android项目页面跳转小Demo

    近期在做Android项目的开发,刚刚接触会有非常多新东西须要学习,从环境的搭建到语言的熟悉都是须要一步步完毕的,接下来就拿一个页面跳转的样例来和大家分享一下自己的心得体会. 採用的架构: Demo中 ...

  7. html5--2.10综合实例2-移动端页面练习

    html5--2.10综合实例2-移动端页面练习 学习要点 通过一个简单的移动手机页面,复习学过的内容 手机网页的测试 手机布局的屏幕设定 手机网页的测试方法 直接在手机上测试,比较麻烦,效果好 电脑 ...

  8. vue入门 0 小demo (挂载点、模板、实例)

    vue入门 0 小demo  (挂载点.模板) 用直接的引用vue.js 首先 讲几个基本的概念 1.挂载点即el:vue 实例化时 元素挂靠的地方. 2.模板 即template:vue 实例化时挂 ...

  9. Flexible实现H5移动端适配小demo

    前言 看了宇哥关于移动端适配的分享后,加上目前公司项目也需要做移动端适配,今天就抽空搞了搞.目前业界还是比较推崇手淘使用"rem+viewport"的解决方案,今天自己模仿手淘fl ...

随机推荐

  1. [NOIP2013 花匠] 新人解题报告

    本来按照老师的要求,我学OI的第一份解题报告应是在寒假完成的关于数据结构的基础题,但由于身体原因当时未能完成,那么就在省选赛前临时写几篇吧…… 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿 ...

  2. React事件系统入门

    React基于虚拟DOM实现了一个合成事件层,我们所定义的事件处理器会接受到一个合成事件层对象的实例,它完全符合W3C标准,不会存在任何IE标准的兼容性问题.并且和原生的浏览器事件一样拥有同样的接口, ...

  3. 【OpenJudge9275】【Usaco2009 Feb】【递推】Bullcow

    Bullcow 总时间限制: 12000ms 单个测试点时间限制: 1000ms 内存限制: 131072kB [描述] 一年一度的展会要来临了,农民约翰想要把N(1 <= N <= 10 ...

  4. Ubuntu 16.04下使用VMware安装CentOS 6.9然后在里面再安装KVM之后配置网桥无法上网的问题

    别试了,这个问题无法解决,已经使用VMware安装了一层虚拟机,然后在里面再安装KVM,网络层次已经变了,即使配置了网桥同样无法上网. 可是这样试一下,不一定成功:把VMware的虚拟机绑定另一张物理 ...

  5. (转)探索C++的秘密之详解extern "C",这就是为什么很多.lib被我们正确调用确总是无法解析的。

    (转载,绝对的有用) lib被我们正确调用确总是无法解析.这是C++编译和C编译的区别 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C&qu ...

  6. JavaScript里的循环方法:forEach,for-in,for-of

    JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) ...

  7. Http和Https网络同步请求httpclient和异步请求async-http-client

    原文:https://blog.csdn.net/fengshizty/article/details/53100694 Http和https网络请求 主要总结一下使用到的网络请求框架,一种是同步网络 ...

  8. WebLogic 1036的镜像构建

    WebLogic1035版本构建出来的镜像有问题,部署应用激活后返回的是后面pod的ip和端口号,在1036版本和12.1.3版本都无此问题. weblogic 1036的Dockerfile [ro ...

  9. REDIS数据备份集群部署和双集群同步工具redis-migrate-tool

    REDIS 版本 < 4.0 笔者用的是 v=3.0.7 REDIS集群创建镜像:registry.cn-shenzhen.aliyuncs.com/cp_m/redis-trib:0.1.3 ...

  10. 【LaTeX】E喵的LaTeX新手入门教程(1)准备篇

    昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}er ...