我正在使用bootstrap 3标签并使用ajax加载选项卡上每个标签的内容。
但有时在服务器变慢时加载内容需要时间。因此,我想在选项卡内容中放置一个微调器,直到服务器返回选项卡内容为止。
首先,是否有内置的简易选项来实现这一目标?(淡化效果不是我想要的。)
如果没有内置函数可以使用我应该在内容中放置一个div并在ajax返回结果时隐藏/显示它?
或者我不应该重复自己,我应该使用jquery将div元素放在活动选项卡中并在ajax完成后替换它?
什么是最佳选择?
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#home" role="tab" data-toggle="tab">Home</a></li>
<li><a href="#profile" role="tab" data-toggle="tab">Profile</a></li>
<li><a href="#messages" role="tab" data-toggle="tab">Messages</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="home"> <div class="spinner"></div> </div>
<div class="tab-pane" id="profile"><div class="spinner"></div></div>
<div class="tab-pane" id="messages"><div class="spinner"></div></div>
</div>
以下是更新每个标签内容的ajax查询
$('.nav-tabs a').click(function (e) {
e.preventDefault();
if ($(this).closest('li').is('.active')) { //stop sending another query when tab active
return;
}
var ts = +new Date();
var tabUrlAddress = $(this).attr("data-url") + '?timestamp=' + ts;
var href = this.hash;
var pane = $(this);
pane.show();
$(href).load(tabUrlAddress, function (result) {
});
});
答案 0 :(得分:6)
由于你正在使用jQuery.load
,你可以修改你的代码:
首先在页面中添加一个加载div。我通常做这样的事情:
<div class="loading">
<img src="/images/loading.gif" />
<div>Loading</div>
</div>
给它一些CSS将它浮动到屏幕中间,设置样式并最初隐藏它:
.loading {
display: none;
position: fixed;
top: 350px;
left: 50%;
margin-top: -96px;
margin-left: -96px;
background-color: #ccc;
opacity: .85;
border-radius: 25px;
width: 192px;
height: 192px;
z-index: 99999;
}
然后修改你的ajax Javascript:
$('.nav-tabs a').click(function (e) {
e.preventDefault();
if ($(this).closest('li').is('.active')) { //stop sending another query when tab active
return;
}
var ts = +new Date();
var tabUrlAddress = $(this).attr("data-url") + '?timestamp=' + ts;
var href = this.hash;
var pane = $(this);
pane.show();
//Show the loader
$(".loading").show();
$(href).load(tabUrlAddress, function (result) {
//Hide when complete
$(".loading").hide();
});
});