リンクから起動するBootstrapモーダルがあります。約3秒間は空白のままで、AJAXクエリはデータベースからデータを取得します。ある種のローディングインジケータをどのように実装できますか? Twitterのブートストラップはデフォルトでこの機能を提供しますか?
編集:モーダルのJSコード
<script type="text/javascript">
$('#myModal').modal('hide');
$('div.divBox a').click(function(){
var vendor = $(this).text();
$('#myModal').off('show');
$('#myModal').on('show', function(){
$.ajax({
type: "GET",
url: "ip.php",
data: "id=" + vendor,
success: function(html){
$("#modal-body").html(html);
$(".modal-header h3").html(vendor);
$('.countstable1').dataTable({
"sDom": "T<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
"sPaginationType": "bootstrap",
"oLanguage": {
"sLengthMenu": "_MENU_ records per page"
},
"aaSorting":[[0, "desc"]],
"iDisplayLength": 10,
"oTableTools": {
"sSwfPath": "swf/copy_csv_xls_pdf.swf",
"aButtons": ["csv", "pdf"]
}
});
}
});
});
});
$('#myModal').on('hide', function () {
$("#modal-body").empty();
});
</script>
モーダルを読み込むためにjQuery.getまたは他のjQuery ajax関数を使用していると思います。 ajax呼び出しの前にインジケーターを表示し、ajaxが完了したらインジケーターを非表示にすることができます。何かのようなもの
$('#indicator').show();
$('#someModal').get(anUrl, someData, function() { $('#indicator').hide(); });
私はこの例に続いて同じ問題を解決しました:
この例ではjQuery JavaScriptライブラリを使用しています。
まず、 AjaxLoad site を使ってAjaxアイコンを作成します。
それから、あなたのHTMLに以下を追加してください:
<img src="/images/loading.gif" id="loading-indicator" style="display:none" />
そしてあなたのCSSファイルに次のように:
#loading-indicator {
position: absolute;
left: 10px;
top: 10px;
}
最後に、jQueryが提供するAjaxイベントにフックする必要があります。 Ajaxリクエストの開始時と終了時のためのイベントハンドラ。
$(document).ajaxSend(function(event, request, settings) {
$('#loading-indicator').show();
});
$(document).ajaxComplete(function(event, request, settings) {
$('#loading-indicator').hide();
});
この解決策は次のリンクからです。 Ajaxリクエスト処理中にアニメーションアイコンを表示する方法
JQueryを使ったグローバル設定があります。このコードは、すべてのグローバルajaxリクエストに対して実行されます。
<div id='ajax_loader' style="position: fixed; left: 50%; top: 50%; display: none;">
<img src="themes/img/ajax-loader.gif"></img>
</div>
<script type="text/javascript">
jQuery(function ($){
$(document).ajaxStop(function(){
$("#ajax_loader").hide();
});
$(document).ajaxStart(function(){
$("#ajax_loader").show();
});
});
</script>
これがデモです。 http://jsfiddle.net/sd01fdcm/
ローディングインジケータは、完了したイベントがAJAXリクエストで呼び出されるまで表示される単なるアニメーションイメージ(.gif)です。 http://ajaxload.info/ あなたのモーダルに重ねることができるロード画像を生成するための多くのオプションを提供します。私の知る限りでは、Bootstrapは組み込みの機能を提供していません。
これは私がリフレッシュする必要があるリモートコンテンツをロードすることでうまくいく方法です。
$(document).ready(function () {
var loadingContent = '<div class="modal-header"><h1>Processing...</h1></div><div class="modal-body"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>';
// This is need so the content gets replaced correctly.
$("#myModal").on("show.bs.modal", function (e) {
$(this).find(".modal-content").html(loadingContent);
var link = $(e.relatedTarget);
$(this).find(".modal-content").load(link.attr("href"));
});
$("#myModal2").on("hide.bs.modal", function (e) {
$(this).removeData('bs.modal');
});
});
基本的には、ロード中のモーダルコンテンツをロードメッセージで置き換えるだけです。ロードが完了するとコンテンツは置き換えられます。
これが、Glyphiconによるローディングインジケータの実現方法です。
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"></script>
<style>
.gly-ani {
animation: ani 2s infinite linear;
}
@keyframes ani {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(359deg);
}
}
</style>
</head>
<body>
<div class="container">
<span class="glyphicon glyphicon-refresh gly-ani" style="font-size:40px;"></span>
</div>
</body>
</html>