var barrageWall={ container:null,//容器选择器 barrageLen:null,//弹幕的条数 lastElem:0,//弹幕出现的位置 overlapElem:-1,//如果大于0则表示每条弹幕轨道上都有弹幕未全部出现,需要重叠定位在弹幕轨道上 barrage:[],//弹幕墙 barrageOffset:[],//弹幕墙上最后一条弹幕的偏移量 init:function(option){ if(option.container===undefined){ console.error("必须指定 container 属性,container为弹幕容器的选择器"); return false; } if(option.barrageLen===undefined){ console.error("必须指定 barrageLen 属性,barrageLen为弹幕轨道的数"); return false; } this.container=option.container; this.barrageLen=option.barrageLen; for(var i=0;i')//创建元素 .addClass('list')//添加样式 .css("top",this.lastElem*38+"px")//定位 // .html(""+user+":"+txt)//添加内容 .html(""+user+txt)//添加内容 .appendTo(this.container);//追加在父元素后面 this.barrage[this.lastElem].push(elem);//追加在数组中 setTimeout(function(){//200ms防止元素动画不执行 elem.addClass("animate"); },200); setTimeout(function(){//25s后动画执行完毕,从数组和页面中移除 for(var i=0;i this.barrageOffset[minOffset]?x:minOffset;//找到最先出现的弹幕 } this.lastElem=minOffset; }, afterOffset: function (i){//找到弹幕出现的位置 if(this.barrage[i].length===0){//为true则表示当前弹幕轨道没有弹幕,则当前弹幕放在改轨道上 this.lastElem=i; this.overlapElem=-1; return true; }else{//当前弹幕轨道上有弹幕 var elem=this.barrage[i][this.barrage[i].length-1];//获取当前弹幕轨道上最后一条弹幕 var aboveWidth=elem.width();//获取它的宽度 var matrix=elem.css('transform');//获取它的矩阵值 if(matrix!=="none"){ var aboveTransform=parseInt(matrix.split(",")[4]);//取出最后一条弹幕的矩阵值中X轴的偏移量,即translateX if(-aboveTransform-aboveWidth>50){//50为间隔 为true则表示当前弹幕轨道上最后一条弹幕已经全部出现,则当前弹幕放在改轨道上 this.lastElem=i; this.overlapElem=-1; return true; } } } return false; } }