最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Js表格萬條數(shù)據(jù)瞬間加載實現(xiàn)代碼

 更新時間:2014年02月20日 10:10:23   作者:  
一條數(shù)據(jù)創(chuàng)建一行,如果數(shù)量大的時候,一次性要加載完數(shù)據(jù)的話,瀏覽器就會卡上半天,下面有個不錯的方法,大家可以參考下
Js表格,萬條數(shù)據(jù)瞬間加載

在Ajax動態(tài)加載數(shù)據(jù)的實際應用中,大家都習慣了一種思維方式:一條數(shù)據(jù)創(chuàng)建一行。
于是如果數(shù)量大的時候,一次性要加載完數(shù)據(jù)的話,瀏覽器就會卡上半天

受Flex的DataGrid控件的啟發(fā),在Flex的DataGrid控件中,展示數(shù)據(jù)的方法并不是有多少條數(shù)據(jù)就創(chuàng)建多少行,它最多只創(chuàng)建你在界面上所看到的十幾二十行(假設為n行),如果數(shù)據(jù)多的話,在滾動過程中,會從數(shù)據(jù)中抽取你應該看到的這n行數(shù)據(jù),重新展示在已經(jīng)創(chuàng)建好的那n行控件中。
也就是說,F(xiàn)lex的DataGrid控件中,我們實際上看到的僅僅是那n行控件,只是它們展示的數(shù)據(jù)是根據(jù)滾動條狀態(tài)來篩選出來的。

所以,如果在JS中,也用類似的方法實現(xiàn),那么就是上萬條數(shù)據(jù),可能也只要創(chuàng)建幾十個Dom而已,效率自然快得多了。
廢話不多說,上代碼。首先,需要一個滾動條
Scrollbar.js
復制代碼 代碼如下:

function Scrollbar() {
this.options = {
total : 0, //數(shù)據(jù)總數(shù)
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";
//設置內(nèi)容高度
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;
}
//每頁可展示的數(shù)據(jù)數(shù)量
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);
}
//滾動條創(chuàng)建
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 = [];
//創(chuàng)建一萬條示例數(shù)據(jù)
for (var i = 0; i < 10000; i++) {
var row = {
id: i,
text: "text" + i
};
data.push(row);
}
//創(chuàng)建滾動條
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);
//僅創(chuàng)建所看到的幾十行表格,所以自然快得多
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());
}
//根據(jù)滾動條,展示數(shù)據(jù)
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>
<!--數(shù)據(jù)展示區(qū)-->
<tbody id="tblList">
<tr id="trTpl">
<td id="tdID">
</td>
<td id="tdText">
</td>
</tr>
</tbody>
</table>
</body>
</html>

相關文章

  • p5.js入門教程之圖片加載

    p5.js入門教程之圖片加載

    這篇文章主要介紹了p5.js入門教程之圖片加載,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • javascript比較文檔位置

    javascript比較文檔位置

    一個很棒的 blog 文章,是 PPK 兩年前寫的,文章中解釋了 contains() 和 compareDocumentPosition() 方法運行在他們各自的瀏覽器上。從那起,我已經(jīng)對這些方法做了大量的研究,并且已經(jīng)在很多場合使用他們。在很多任務中,他們被證明是非常有用的(特別關于結構的抽象 DOM 選擇器)。
    2008-04-04
  • 簡單談談javascript Date類型

    簡單談談javascript Date類型

    Date對象,是操作日期和時間的對象。Date對象對日期和時間的操作只能通過方法。本文就給大家簡單講述一下DATE類型的使用。
    2015-09-09
  • js/jq仿window文件夾框選操作插件

    js/jq仿window文件夾框選操作插件

    這篇文章主要介紹了js/jq仿window文件夾框選操作插件,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • 一文解析ChatGPT?之?Fetch?請求

    一文解析ChatGPT?之?Fetch?請求

    這篇文章主要為大家介紹了ChatGPT?之?Fetch請求的內(nèi)容解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • JS繼承之借用構造函數(shù)繼承和組合繼承

    JS繼承之借用構造函數(shù)繼承和組合繼承

    這篇文章主要為大家詳細介紹了JS繼承之借用構造函數(shù)繼承和組合繼承,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • JavaScript 獲得選中文本內(nèi)容的方法

    JavaScript 獲得選中文本內(nèi)容的方法

    今天希望實現(xiàn)一個,直接在網(wǎng)頁上選中文本,點擊收藏夾的鏈接(javascript)即可彈出新窗口(類似“百度搜藏”和“QQ書簽”),新窗口中的文本框即顯示了選中的文本。
    2009-02-02
  • javascript suggest效果 自動完成實現(xiàn)代碼分享

    javascript suggest效果 自動完成實現(xiàn)代碼分享

    像百度與google,當我們往搜索框輸入東西時就會出現(xiàn)一排列表提示用戶有什么熱門或適合的候選詞,這種效果就叫suggest。本文將一步步教你如何設計它
    2012-02-02
  • JSON數(shù)據(jù)中存在單個轉義字符“\”的處理方法

    JSON數(shù)據(jù)中存在單個轉義字符“\”的處理方法

    這篇文章主要介紹了JSON數(shù)據(jù)中存在單個轉義字符“\”的處理方法,在這里反斜杠(又稱右斜杠"\"),還表示轉義字符,字符串中不能成單出現(xiàn)。具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧
    2018-07-07
  • 在表單提交前進行驗證的幾種方式整理

    在表單提交前進行驗證的幾種方式整理

    為了減輕后臺壓力,可以利用JavaScript在表單提交前對表單數(shù)據(jù)進行驗證,本文整理了常用的幾種方式,有需求的朋友可以參考下
    2013-07-07

最新評論

蒲城县| 江西省| 汉源县| 新晃| 集贤县| 耒阳市| 富平县| 汾阳市| 利川市| 凤山市| 衡南县| 军事| 湖州市| 吉林市| 七台河市| 象山县| 阜平县| 通榆县| 元阳县| 桐庐县| 酉阳| 泽普县| 麻栗坡县| 永春县| 宣武区| 太湖县| 瑞丽市| 陕西省| 江西省| 马尔康县| 且末县| 张北县| 呈贡县| 黄梅县| 江口县| 永登县| 乌兰察布市| 安溪县| 陵水| 道孚县| 怀宁县|