Js表格,万条数据瞬间加载
在Ajax动态加载数据的实际应用中,大家都习惯了一种思维方式:一条数据创建一行。
于是如果数量大的时候,一次性要加载完数据的话,浏览器就会卡上半天
受Flex的DataGrid控件的启发,在Flex的DataGrid控件中,展示数据的方法并不是有多少条数据就创建多少行,它最多只创建你在界面上所看到的十几二十行(假设为n行),如果数据多的话,在滚动过程中,会从数据中抽取你应该看到的这n行数据,重新展示在已经创建好的那n行控件中。
也就是说,Flex的DataGrid控件中,我们实际上看到的仅仅是那n行控件,只是它们展示的数据是根据滚动条状态来筛选出来的。
所以,如果在JS中,也用类似的方法实现,那么就是上万条数据,可能也只要创建几十个Dom而已,效率自然快得多了。
废话不多说,上代码。首先,需要一个滚动条
Scrollbar.js
复制代码 代码如下:
function Scrollbar() {
this.options = {
total : 0, //数据总数
pos : 0, //当前滚动位置
itemSize : 20, //单项尺寸
size : 200 //控件尺寸
};
}
Scrollbar.prototype = (function () {
function setOptions(options) {
for (var attr in options) {
this.options[attr] = options[attr];
}
Refresh(this);
}
function Refresh(_this) {
if (!_this.created)
return; //设置控件高度
_this.bar.style.height = _this.options.size + "px";
//设置内容高度
var ch = _this.options.total * _this.options.itemSize;
_this.content.style.height = ch + "px";
}
//获取滚动位置
function getPos() {
var top = this.bar.scrollTop;
var pos = parseInt(top / this.options.itemSize);
return pos;
}
//每页可展示的数据数量
function getPageItems() {
return this.options.size / this.options.itemSize;
}
//滚动事件响应
function OnScroll(_this) {
var pos = _this.getPos();
if (pos == _this.options.pos)
return;
_this.options.pos = pos;
_this.onScroll(pos);
}
//滚动条创建
function CreateAt(dom) {
var _this = this;
var bar = document.createElement("div");
var content = document.createElement("div");
bar.appendChild(content);
bar.style.width = "19px";
bar.style.overflowY = "scroll";
bar.style.overflowX = "hidden";
if (bar.attachEvent) {
bar.attachEvent("onscroll", function () {
OnScroll(_this);
});
} else {
//firefox兼容
bar.addEventListener("scroll", function () {
OnScroll(_this);
}, false);
}
content.style.backgroundColor = "white";
content.style.width = "1px";
this.bar = bar;
this.content = content;
if (typeof(dom) == "string") {
dom = document.getElementById(dom);
}
dom.innerHTML = "";
dom.appendChild(this.bar);
this.created = true;
Refresh(this);
}
return {
setOptions : setOptions,
CreateAt : CreateAt,
getPos : getPos,
getPageItems : getPageItems,
onScroll : null
//模拟滚动条事件
};
})();
页面代码:
复制代码 代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
表格控件
</title>
<script src="Scrollbar.js" type="text/javascript">
</script>
<script language="javascript" type="text/javascript">
var data = [];
//创建一万条示例数据
for (var i = 0; i < 10000; i++) {
var row = {
id: i,
text: "text" + i
};
data.push(row);
}
//创建滚动条
var scrbar = new Scrollbar();
window.onload = function() {
scrbar.CreateAt("divScroll");
scrbar.setOptions({
total: 10000,
size: 300
});
scrbar.onScroll = function(pos) {
ShowData(pos);
}
//获取模板
var items = scrbar.getPageItems();
var tpl = document.getElementById("trTpl");
tpl.parentNode.removeChild(tpl);
//仅创建所看到的几十行表格,所以自然快得多
var list = document.getElementById("tblList");
for (var i = 0; i < data.length && i < items; i++) {
var nr = tpl.cloneNode(true);
//从模板行复制新行
list.appendChild(nr);
}
ShowData(scrbar.getPos());
}
//根据滚动条,展示数据
function ShowData(pos) {
var n = scrbar.getPageItems();
var rows = document.getElementById("tblList").rows;
for (var i = 0; i < n; i++) {
var row = rows[i];
var item = data[i + pos];
row.cells["tdID"].innerHTML = item["id"];
row.cells["tdText"].innerHTML = item["text"];
}
}
</script>
</head>
<body>
<div id="divScroll" style="float:right">
</div>
<table border="1">
<!--行标题-->
<thead>
<tr>
<th>
ID
</th>
<th>
Text
</th>
</tr>
</thead>
<!--数据展示区-->
<tbody id="tblList">
<tr id="trTpl">
<td id="tdID">
</td>
<td id="tdText">
</td>
</tr>
</tbody>
</table>
</body>
</html>
相关推荐:
AI通过算法和数据生成的作品:科技与艺术的跨越,带来无限创意可能,ai优化程序
ChatGPT为什么打不开?背后原因与解决方案,慧ai写作
SEO阶段解析:从入门到精通,助你站稳搜索引擎的前沿,网站建设特定开发
seo需要干什么,seo需要具备什么知识 ,ai梦境档案世岛大宅
ChatGPT无法使用?了解原因及解决方法,轻松恢复智能对话体验!,ai满版图案
AI一键生成文章网页版,让内容创作更简单高效
360ai答题-赋能教育,开启智能学习新纪元,ai 果汁
智能AI生成文章释放创作新可能
ChatGPT无法加载?检查您的网络设置并尝试重启Chat,ai写作怎么写作文的
怎样使用AI写文章:释放创作潜能,提升写作效率
AI人工智能文章生成平台,释放创作无限可能
个性化广告:新时代营销的秘密武器,建设经营性网站怎么记账
OpenAI注册问题解决方案:如何顺利通过手机号验证,反对ai头像
SEO外链建设:提升网站排名的关键策略,ai偏执
SEO建站,开启网站优化的全新篇章!,网络营销推广合作方式
Goanno跨级借鉴:推动创新与提升效率的秘密武器,崇明区智能ai艾灸费用
为什么要监控SEO效果,国家为什么要监控个人 ,抚顺ai系统
SEO差价如何用SEO优化帮助企业实现成本与效益的完美平衡,盐城seo收费贵吗
“新热度”:引领潮流的力量,如何趋势的脉搏,浙江通用网站建设特点
ChatGPT不登录,如何畅享AI的智能服务?,手信ai
SEO技术如何通过优化提升网站流量与排名,四平网站优化公司
SEO更多-让你的企业站点在搜索引擎中脱颖而出,如何结交seo大神
AI免费写文章生成器高效写作新革命
seo规范是什么,seo行业标准 ,啊龙ai音乐
二SEO是什么,h二seo三是什么 ,ai手术机
SEO公司核心业务是什么?揭秘提升网站排名的奥秘,写作助手ai一键生成作文在线
seo要什么条件,seo都需要做什么 ,交互ai求职
自动生成文章的AI软件,助力内容创作的未来
SEO重要性与企业互联网发展的必由之路,互联网营销推广平台设计
AI免费工具:提升效率与创意的秘密武器
目前AI软件有哪些?智能新时代的必备工具
OpenAI账号申诉怎么办?全方位解析解决方案,ai写作免费公众号下载
UCMS:引领智慧医疗新时代,打造数字化健康未来,推广工作谈营销
如何通过AI写文章,轻松提高写作效率与质量
SEO详解:如何优化你的网站提升排名,获得更多流量,伊春湖南网站优化推广
文章AI排版,让创作更高效的秘密武器
Bing学术搜索结果不显示时间?如何解决这一问题,提升学术研究效率!,ai怎么参考线
AI工具汇总网站,让科技为您的工作加速
丹东抖音seo是什么,抖音seo引流 ,ai工具编写作业指导书
AI自动生成:开启智能时代的无限可能,ai熊熊图片
seo用什么手法,seo方式 ,ai绘画飞翔
如何用AI改文章,让写作更高效、精准,提升内容质量
SEO调整,助力网站流量爆发式增长!,江都seo优化排名
ChatGPT不能加载过去的对话,如何提升你的使用体验?,ai智能衣服
seo配置是什么,seo设置是什么 ,ai图标制作教程
seo用什么法宝,列出5种seo赚钱方式 ,ai怎么更改文档样式
为什么要做seo si,为什么要做* ,ai里面怎么扣二维码
AI免费写文:创作新时代的高效助手
优化公司:助力企业腾飞的秘密武器,微信营销推广价格多少
SEO超级,助力企业站点冲刺搜索引擎排名,白云全网营销推广哪家强