JQuery:更新表内容花费的时间太长
JQuery: Updating table content takes too long
我使用JQueryAjax从服务器获取表的内容,使用如下代码:
success: function(data)
{
//once I get the data, remove the old content from table
$('.tableBody').empty();
// then repopulate the table
$.each(data, function(key,val) {
//process the data, add different icons, texts...,append it to my table
showTable(key, val);
});
}
这很好用。但问题是表有很多行,所以重新填充大约需要300毫秒(empty()
只需要大约10毫秒),所以在很短的一段时间内,表是空白的。
我是否可以在"empty()"
和"showTable()"
之间添加一些动画,以避免出现空白屏幕,从而实现无缝过渡?
如果showTable()
正在做的是"处理数据,添加不同的图标、文本…,将其附加到[您的]表中",那么它可能看起来像这样:
$.each(data, function(key, val){
$('.tableBody').append(key +' - '+ val);
});
您首先应该知道的是,将HTML尽可能长时间地保存在字符串中,然后将其放入jQuery对象中并将其附加到DOM中,而不是创建多个jQuery对象并将其多次附加到DOM,这样会更快。所以你最好做这样的事情:
var tableContents = '';
$.each(data, function(key,val){
tableContents += key +' - '+ val; // generate whatever HTML you need
});
$('.tableBody').append(tableContents);
它可以让你在重新填充之前清空表格:
var tableContents = '';
$.each(data, function(key,val){
tableContents += key +' - '+ val; // generate whatever HTML you need
});
$('.tableBody')
.empty()
.append(tableContents);
在AJAX回调中收到数据后(甚至在此之前),显示加载动画,完成您的工作,然后再次显示表单/表。
有点像一个基本的例子。。点击提交,显示加载动画,隐藏表单。做你的事情(AJAX请求),然后隐藏加载动画,再次显示表单。
<img class="loading" src="http://www.link-to-loading-anim.com/loading.gif"/>
<form method="post">
<input value="Click Me" type="submit"/>
</form>
Javascript:
// On dom ready, hide our loading animation
$('img.loading').hide();
// on form submit, show the animation,
$('form').submit(function(e){
e.preventDefault(); // we dont really need to submit the form!!
// Show our loading animation
$('img.loading').fadeIn();
// Optional: Hide the form..
$('form').hide();
// Do something here.. (AJAX Request)
// - Your success of AJAX request..
// Hide the image loader on success.. (setTimeout used for demo purposes)
setTimeout(hideImageLoader, 2000);
});
function hideImageLoader(){
$('img.loading').fadeOut('slow', function(){
$('form').show();
});
}
下面是一个用于基本加载动画示例的JSfiddle。
如果我是你,我会slideUp
旧表(或者最好在顶部放置一个半透明的白色div),并在屏幕外准备新表,然后简单地交换内容和slideDown
(如果选择此方法,则fadeOut
为白色div)
您可以创建一个未附加到DOM的表元素,根据需要填充它,然后在生成完现有表后替换它,也可以让服务器为您完成表的格式化,只需用已经格式化的ajax响应替换您的表。
相关文章:
- Html5音频时间更新精度
- 使用引导时间选取器时,没有更新数据ng模型值
- 更新 FLOT 时间序列图
- 如果在线检查期间发生电源故障,我们如何更新用户再次登录门户时的剩余时间
- JQuery:更新表内容花费的时间太长
- 如何制作倒计时计时器并在时间到时更新MySQL记录
- 如何在页面上显示时间、日期IP和URL?更新日期:2015年2月25日
- 如何在一个时间间隔后追加新的更新
- 更新网页上的计时器,并保持经过的时间--如何处理
- Javascript函数在视频时间更新时未触发
- 调用两次时间更新
- HTML5视频时间更新事件未启动
- html5视频的时间更新事件多久触发一次
- 在视频时间更新时操作动态创建的内容
- 在Angular中,数据没有在预期的时间更新
- 每隔一段时间更新一个HTML标签
- 在javascript中基于时间更新动画(独立于帧)
- 当从父组件状态传递时,React prop没有在正确的时间更新
- 嵌入对象的时间更新事件监听器
- 每隔一段时间更新 Javascript 变量