jQuery での遅い操作中に小さな読み込みイメージを表示しようとしていますが、正しく表示されません。これは、数千行の BIG テーブルです。「mostrarArticulosDeReferencia」チェックボックスをオンにすると、これらの行から「非表示」クラスが削除されます。この操作には数秒かかります。フィードバックをお願いします。「loading」は、小さなアニメーション gif を含む div です。
ここに完全なコードがあります
jQuery(document).ready(function() {
jQuery("#mostrarArticulosDeReferencia").click(function(event){
if( jQuery("#mostrarArticulosDeReferencia").attr("checked") ) {
jQuery("#loading").show(); //not showing
jQuery("#listadoArticulos tr.r").removeClass("hidden"); //slow operation
jQuery("#loading").hide();
} else {
jQuery("#loading").show(); //not showing
jQuery("#listadoArticulos tr.r").addClass("hidden"); //slow operation
jQuery("#loading").hide();
}
});
jQuery("#loading").hide();
});
jqueryがこれらの3行を「最適化」しているようです
jQuery("#loading").show(); //not showing
jQuery("#listadoArticulos tr.r").removeClass("hidden");
jQuery("#loading").hide();
また、読み込み中の div は表示されません。何か案は?
おまけ: この表示/非表示をより高速に行う方法はありますか? トグルがかなり遅いことがわかりました。
更新:私はこれを試しました
jQuery("#mostrarArticulosDeReferencia").click(function(event){
if( jQuery("#mostrarArticulosDeReferencia").attr("checked") ) {
jQuery("#loading").show(); //not showing
jQuery("#listadoArticulos tr.r").removeClass("hidden"); //slow operation
setTimeout("jQuery('#loading').hide()", 1000);
} else {
jQuery("#loading").show(); //not showing
jQuery("#listadoArticulos tr.r").addClass("hidden"); //slow operation
setTimeout("jQuery('#loading').hide()", 1000);
}
});
それが私が得るものです
- チェックボックスをクリック
- 2/3 秒間何も起こらない (処理中)
- ページが更新されます
- 読み込み中の div が一瞬表示される
更新 2: 実用的なソリューションがあります。しかし、それを機能させるために setTimeout を使用しなければならない理由は私にはわかりません...
jQuery("#mostrarArticulosDeReferencia").click(function(event){
if( jQuery("#mostrarArticulosDeReferencia").attr("checked") ) {
jQuery("#loading").show();
setTimeout("jQuery('#listadoArticulos tr.r').removeClass('hidden');", 1);
setTimeout("jQuery('#loading').hide()", 1);
} else {
jQuery("#loading").show();
setTimeout("jQuery('#listadoArticulos tr.r').addClass('hidden');", 1);
setTimeout("jQuery('#loading').hide()", 1);
}
});
更新 3: この特定のケースのより良い解決策を見つけました。
//mostrar u ocultar articulos de referencia
$("#mostrarArticulosDeReferencia").click(function(event){
if( $("#mostrarArticulosDeReferencia").attr("checked") )
$("tr.r").css({'display':'table-row'});
else
$("tr.r").css({'display':'none'});
});
.css({'display':'none'}) を使用すると、 hide () よりもはるかに高速であることが判明したため、ローディング アニメーションは必要あり
ません。