[英]Bootstrap 3: Show spinner + fade background whilst waiting for modal content to load
[英]Spinner inside Modal while waiting for Data to Load
我有一个物品清单,每个物品都附有徽章。 当您单击徽章时,它将从局部视图中加载表格。
这是我的徽章循环:
@foreach (var item in Model)
{
<li>
<a href="#my_modal" data-toggle="modal" data-book-id="@Url.Action("AssociatedToHideout", "Hideout", new { id = item.HideoutID })">
<span class="badge-rounded bg-red">@Html.Action("TaskCount", "Hideout", new { id = @item.HideoutID })</span>
</a>
<div class="item">
<a href='@Url.Action("Index", "Hideout", new { id = @item.HideoutID })'>
<img src="~/Assets/img/database.png">
<span class="caption">@item.Name</span>
</a>
</div>
</li>
}
data-book-id中的URL操作将告诉我要加载哪个局部视图。
这是我的模态:
<div class="modal" id="my_modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">Modal header</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
将其加载到模态中的脚本是这样的:
<script>
$('#my_modal').on('show.bs.modal', function(e) {
var bookId = $(e.relatedTarget).data('book-id');
$.get(bookId, function (data) {
$(e.currentTarget).find('.modal-body').html(data);
});
});
$('#my_modal').on('hidden.bs.modal', function(e) {
$(e.currentTarget).find('.modal-body').text('');
});
</script>
问题是当我第一次加载页面时,有时.html(data)
不会立即显示,因此我希望微调器在等待时出现。 我怎样才能做到这一点?
我们使用waitscreen.js。 使用非常简单, 可以在github上找到 。 您需要显示或隐藏的全部是:
//Show options
waitScreen.show();
waitScreen.show("Message");
//Then hide
waitScreen.hide();
并将它们嵌入到适当的位置,该位置将是:
$('#my_modal').on('show.bs.modal', function(e) {
var bookId = $(e.relatedTarget).data('book-id');
waitScreen.show();
$.get(bookId, function (data) {
$(e.currentTarget).find('.modal-body').html(data);
waitScreen.hide();
});
});
您还应该添加一些错误处理,因为如果发生任何错误,模态将永远不会消失...
您可以在进行ajax调用之前将loding gif图像设置为.modal-body
div的内容。 当您的ajax调用从服务器获取响应时,该响应将覆盖它。
$('#my_modal').on('show.bs.modal', function(e) {
var bookId = $(e.relatedTarget).data('book-id');
var imgUrl="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.16.1/images/loader-large.gif";
var $loading = $("<img />").attr("src",imgUrl)
$(e.currentTarget).find('.modal-body').html($loading);
$.get(bookId, function (data) {
$(e.currentTarget).find('.modal-body').html(data);
});
});
这里的技巧是data-backdrop="false" style="background-color: rgba(0, 0, 0, 0.5);"
通过删除默认背景并通过使用一些alpha设置对话框本身的背景颜色来创建一个虚拟背景。
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="false" style="background-color: rgba(0, 0, 0, 0.5);">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">...</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
注意:单击背景不会按预期关闭对话框。 解决方案:为此,您必须添加一些Java脚本代码。 这是一些示例,您可以如何实现此目的。
$('.modal').click(function(event){
$(event.target).modal('hide');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.