我需要顯示一個包含大量項目的表格。 所以我想實現,從服務器端延遲加載。 然後,當用戶向下(或向上)滾動時,我打電話給服務器以獲取下一個/上一個定義的項目數量,並顯示它們而不是舊項目(或將它們添加到舊項目中)。 有沒有簡單的方法來實現呢? 是否有一些JavaScript庫可以幫助我實現此功能? 任何幫助將不勝感激。謝謝從服務器端使用js滾動延遲加載表
6
A
回答
1
檢查此模板,請按照評論,你將能夠編寫自己的代碼。請記住,這只是一個例子。
var $win = $(window),
$table = $('.table'), // your table
lazyPoint = 0, // point to call next ajax
offset = 30, // number of last table row
count = 30, // number of rows to load with one request
loading = false; // flag to prevent more than 1 loading at a time
// this function will calc next Y coordinate
// then you reach it, use ajax to get some new table data
function calcLazyPoint() {
var top = $table.offset().top;
var height = $table.outerHeight();
lazyPoint = top + height;
}
// add loaded data to table
function addToTable (data) {
var html;
// use some template engine here, like this: http://handlebarsjs.com/
// in this function you should convert raw data
// to HTML, which you will append to table
$table.append(html); // append data to table
offset += 30; // increase your offset
loading = false; // allow to load next data portions
calcLazyPoint(); // calc next lazy point
}
// Function with ajax request
// it will ask server for new data
// using your offset and count
function getTableData() {
$.ajax({
data: {
offset: offset,
count: count
},
success: addToTable
});
}
$win.on("scroll", function() {
var top = $win.scrollTop(); // get scrollTop
var height = $win.innerHeight(); // viewport height
var scrollPoint = top + height;
if (scrollPoint > lazyPoint && !loading) {
getTableData(); // ajax request
loading = true; // prevent more than 1 request
}
});
// fist start
calcLazyPoint();
3
你可以做到這一點使用scrollHeight
,clientHeight
和scrollTop
,檢測時滾動條是接近底部區域,那麼你取你的新項目:
這是一個例子( the demo):
HTML
<div id="container">
<div id="scrollbox" >
<div id="content" >
<p>Lorem ipsum dolor sit amet</p>
<p>Ipsum lorem dolor amet sit</p>
<p>Dolor lorem ipsum amet tis</p>
<p>Lorem ipsum dolor sit amet</p>
<p>Ipsum lorem dolor amet sit</p>
<p>Dolor lorem ipsum amet tis</p>
<p>Lorem ipsum dolor sit amet</p>
<p>Ipsum lorem dolor amet sit</p>
<p>Dolor lorem ipsum amet tis</p>
</div>
</div>
<p><span id="status" ></span></p>
</div>
CSS
#container{
width:400px;
margin:0px auto;
padding:40px 0;
}
#scrollbox{
width:400px;
height:300px;
overflow:auto; overflow-x:hidden;
}
#container > p{
background:#eee;
color:#666;
font-family:Arial, sans-serif; font-size:0.75em;
padding:5px; margin:0;
text-align:rightright;
}
的JavaScript
$('document').ready(function(){
updatestatus();
scrollalert();
});
function updatestatus(){
//Show number of loaded items
var totalItems=$('#content p').length;
$('#status').text('Loaded '+totalItems+' Items');
}
function scrollalert(){
var scrolltop=$('#scrollbox').attr('scrollTop');
var scrollheight=$('#scrollbox').attr('scrollHeight');
var windowheight=$('#scrollbox').attr('clientHeight');
var scrolloffset=20;
if(scrolltop>=(scrollheight-(windowheight+scrolloffset)))
{
//fetch new items
$('#status').text('Loading more items...');
$.get('new-items.html', '', function(newitems){
$('#content').append(newitems);
updatestatus();
});
}
setTimeout('scrollalert();', 1500);
}
PS:我從here複製/粘貼代碼源。
1
您可以使用jQuery.isInView,這是我的一個庫,幾乎遵循usage example,它實現了延遲加載。
相關問題
- 1. 數據表延遲加載服務器過濾器延遲
- 2. 服務器端延遲
- 3. 向表單滾動器添加延遲
- 4. 延遲後的JS滾動
- 5. PDF JS - 延遲加載?
- 6. 使用Parse.com從歐洲服務器延遲服務器
- 7. 延遲加載/無限滾動和Django
- 8. UIWebview延遲滾動時加載文本?
- 9. jQuery - 延遲加載功能w /滾動
- 10. 溫莎城堡延遲加載服務
- 11. 執行延遲加載XSJS服務
- 12. 延遲加載不@服務類工作
- 13. 延遲加載延遲
- 14. 使用Ajax延遲加載
- 15. Auth0服務使用在延遲加載NG2應用
- 16. 服務器啓動時間長延遲
- 17. 延遲啓動服務
- 18. Azure移動服務延遲
- 19. 運行jquery延遲加載頁面加載不滾動
- 20. 如何在Javascript中添加服務器端延遲for循環?
- 21. 使用WCF服務域模型進行延遲加載?
- 22. AS 2滾動頂端與延遲
- 23. FLEX中的可滾動延遲加載表
- 24. 加載動畫與延遲
- 25. 動態與延遲加載
- 26. DataGrid延遲滾動
- 27. jquery延遲滾動
- 28. jQuery如何使用延遲加載滾動加載更多內容
- 29. 從加載延遲AJAX?
- 30. 延遲加載從XML