jQuery实现评论弹幕、弹幕漂浮、滚动代码
1、html代码和jquery代码:
<!DOCTYPE html>
<html> <head lang="en">
<meta charset="UTF-8">
<title>document</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0, minimun-scale=1.0,user-scalable=no;">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<script type="text/javascript" src="js/auto_rem.js"></script>
<link rel="stylesheet" href="css/style.css" />
</head> <body>
<header class="fixed top-nav">
<a class="back"></a>
<span class="title">公屏</span>
<a class="home"></a>
</header>
<div class="gp-body">
<div class="main-box">
<ul class="all-list">
</ul>
</div>
<div class="fixed send-ms flex">
<div class="ipt s_txt flex1" contenteditable="true"></div>
<span class="btn s_btn">发送</span>
</div>
</div>
</body>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
//发表评论
$.getJSON('./js/test.json', function(result) {
actFn($('.all-list'), result)
}) function actFn(tar, data) {
var data = data;
startTranslate();
appendNewItem(); function startTranslate() {
var key = 0;
var leng = data.length;
var time = setInterval(function() {
if (key >= leng) {
clearInterval(time);
return;
};
var _html = itemHtml(data[key].img_src, data[key].grade, data[key].words)
key++;
tar.append(_html);
translateFn();
}, 400);
} function appendNewItem() {
$(".s_btn").click(function() {
var text = $(".s_txt").html();
if (text == '') return;
var _html = itemHtml('./img/heads.png', '最强王者', text)
tar.prepend(_html);
$(".s_txt").html('');
translateFn();
});
} function itemHtml(img, grade, words) {
var _html = "<li class='item'>" +
"<span class='img-box'>" +
"<img src='" + img + "' alt=''>" +
"</span>" +
"<p class='para'>" +
"<em class='grade'>" + grade + "</em>" +
"<span class='words'>" + words + "</span>" +
"</p>" +
"</li>";
return _html;
} var initTop = 20;
var _top = initTop; function translateFn() {
tar.find("li[class!='had']").show().each(function(item, key) {
if ($(this).hasClass('had')) return;
var that = this;
var twidth = $(this).width();
var _left = $(window).width() + twidth;
var rd = Math.random() * 100;
var rdColor = getRandomColor();
var _height = $(window).height();
var time = 20000;
if (_top > _height - 150) {
if (initTop == 20) {
_top = initTop = 60;
} else {
_top = initTop = 20;
}
}
$(this).find('.grade').css({
color: rdColor
})
$(this).css({
top: _top,
right: "-" + twidth + "px"
});
$(this).css({
transform: "translateX(-" + (_left + rd + 200) + "px)"
}).addClass('had');
_top = _top + 80;
});
} //随机获取颜色值
function getRandomColor() {
return '#' + (function(h) {
return new Array(7 - h.length).join("0") + h
})((Math.random() * 0x1000000 << 0).toString(16))
}
}
}); //初始化弹幕
</script> </html>
2、scss代码:
.gp-body {
@extend .main;
width: 100%;
height: 100%;
.main-box {
background: url("../img/gp-bg.jpg") no-repeat;
background-size: 100% 100%;
height: 100%;
width: 100%;
overflow: hidden;
overflow-y: scroll;
.all-list {
position: relative;
}
.item {
display: inline-block;
position: absolute;
top:;
right: -100%;
display: none;
transition: transform 12s ease-in-out; //css设置移动的时间及表现
; .para {
color: white;
font-size: 14px;
line-height: 37px;
display: inline-block;
overflow: hidden;
border-radius: 20px;
background: rgba(0, 0, 0, 0.6);
padding: 0 10px;
max-width: 400px;
white-space: nowrap;
text-overflow: ellipsis;
.grade {
margin-right: 3px;
}
}
.img-box {
float: left;
img {
width: 35px;
height: 35px;
border-radius: 100%;
margin-right: 5px;
}
}
}
}
}
评论弹幕的主要思想是重看不到的屏幕位置移动到屏幕看到的位置,最后消失,所以需要移动,这里采用的是css3 的translate 方法,可以实现目标的移动而在移动端不卡顿。
至于每条屏幕的飘移过程中之间的位置关系需要良好的设置,比如间隔时间插入每条评论,这样就会在垂直位置上错开,还有就是top位置的关系上的调节等,比如奇数排设置top20,偶数排设置60,这样又可以错开水平方面的每条评论的位置。如下的错开:
以下是最终效果图:
以下是demo数据:
[{
"img_src": "./img/heads.png",
"grade": "最强王者",
"words": "灯笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打笼裤飞机失控打飞机"
}, {
"img_src": "./img/heads.png",
"grade": "最强王者",
"words": "灯笼裤飞机失控飞机失控飞机失控打飞机"
}, {
"img_src": "./img/heads.png",
"grade": "最强王者",
"words": "灯笼裤飞机失控打飞机"
}, {
"img_src": "./img/heads.png",
"grade": "最强王者",
"words": "灯笼裤飞机失控飞机失控飞机失控打飞机"
}, {
"img_src": "./img/heads.png",
"grade": "最强王者",
"words": "灯笼裤飞机失控飞机失控飞机失控打飞机"
}, {
"img_src": "./img/heads.png",
"grade": "荣耀黄金",
"words": "灯笼裤飞机失控打飞机"
}, {
"img_src": "./img/heads.png",
"grade": "最强王者",
"words": "灯笼裤飞机失控打飞机last"
}]
jQuery实现评论弹幕、弹幕漂浮、滚动代码的更多相关文章
- jquery图片无缝滚动代码左右 上下无缝滚动图片
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jQuery星级评论表单美化代码
最近正在做php第二阶段的项目,由于我们小组做的是游戏评论网站,所以需要用到评分评论的页面,这里我做了个星级评论表单 1.首先,我们需要引入一个jQuery文件,代码如下: /*! * jQuery ...
- JQuery漂浮广告代码
<!doctype html><html><head><meta charset="utf-8"><title>jque ...
- jQuery防京东浮动网站楼层导航代码
jQuery防京东浮动网站楼层导航代码 <!DOCTYPE html > <html xmlns="http://www.w3.org/1999/xhtml" ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 使用虚拟滚动视图显示海量数据
jQuery EasyUI 数据网格 - 使用虚拟滚动视图显示海量数据 数据网格(datagrid)的虚拟滚动特性可以用来显示大数量的记录而不需要分页. 当滚动垂直滚动条时,数据网格(datagrid ...
- JavaScript浮动广告代码,容纯DIV/CSS对联漂浮广告代码,兼容性非常好的js右下角与漂浮广告代码
基于JavaScript代码实现随机漂浮图片广告,javascript图片广告 在网上有很多这样的代码,不过未必符合W3C标准,因为在头部加上<!DOCTYPE html>类似标签之后,漂 ...
- jquery鼠标移动div内容上下左右滚动
jquery鼠标移动div内容上下左右滚动 点击这里查看效果:http://keleyi.com/keleyi/phtml/jqtexiao/9.htm <!DOCTYPE html PUBLI ...
- Web jquery表格组件 JQGrid 的使用 - 全部代码
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- HTML滚动字幕代码参数详解及Js间隔滚动代码
html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...
- 仿jQuery的siblings效果的js原生代码
仿jQuery的siblings效果的js原生代码 <previousSibling> 属性返回选定节点的上一个同级节点(在相同树层级中的前一个节点). <nextSibling&g ...
随机推荐
- div中 li宽度不固定 ie6和ie7不兼容不自动换行
我的li因为内容字数不一样,所以宽度不固定,给他float:left属性后,ie6和ie7不兼容,不自动换行!我给ul或者li: ul{white-space: nowrap} 属性还是不管用..最后 ...
- setsockopt调用IP_ADD_MEMBERSHIP出错errno:19 no such device
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) { pri ...
- Day36 数据库的操作
视图操作: 1.左连接查询 select * from person left join dept on person.dept_id = dept.did 2. 右连接 3. 内连接 inner ...
- httpclient中文乱码
https://blog.csdn.net/teamlet/article/details/8605840
- 关于fit和transform
Fit是对于数据进行拟合,所谓拟合,就是根据数据,计算获得数据里面的一些指标,比如均值,方差:下一步很多API都是需要这些参数来进行后续对数据的操作,比如下面要讲到的transform. Transf ...
- VMware虚拟机安装红帽系统无法上网解决办法(转)
原文地址:https://www.aliyun.com/jiaocheng/146779.html 1.最近在vmware安装redhat 7.4虚拟机后无法上网,首先按照下文配置,能ping同宿主机 ...
- cgred不能自动将pid放入tasks
问题: cgred不能自动将pid放入tasks cgred / cgrulesengd - does not move new user pid to task file https://serve ...
- SDI core端口说明
SDI core端口说明 本文基于赛灵思的官方文档以及自己的理解: 1.生成SDI core 2.得到SDI core的顶层文件,并对每个端口做出解释 smpte_sdi smpte_sdi ( .r ...
- Django的版本选择
自从1.0版本开始,Django按照以下形式命名版本编号: 按照A.B或A.B.C的形式命名版本编号.A.B是主版本号,包含新功能以及对原有功能的改进,每一个新版本都向前兼容,Django大概每8个月 ...
- MySQL性能管理及架构设计
第1章 实例和故事 1-1 什么决定了电商双11大促的成败 老板可能会说:"是我们的英明决策和运筹帷幄". 运营和产品可能会说:"是由于我们的活动策划和产品设计" ...