Я пытаюсь показать небольшое загрузочное изображение во время медленной работы с jQuery и не могу понять это правильно. Это большая таблица с тысячами строк. Когда я устанавливаю флажок «mostrarArticulosDeReferencia», он удаляет «скрытый» класс из этих строк. Эта операция занимает пару секунд, и я хочу дать некоторую обратную связь. «загрузка» является ДИВЫМ с небольшим анимированным GIFjQuery show "loading" во время медленной работы
Вот полный код
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();
И никогда не показывает загрузку дела. Любые идеи?
Бонус: Есть ли более быстрый способ сделать это шоу/скрыть предмет? Выяснилось, что переключение происходит медленнее.
UPDATE: Я попробовал этот
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);
}
});
UPDATE 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 ({ «отображение»: «Нет»}) оказывается намного быстрее, чем шкура(), поэтому нет необходимости для загрузки анимации ...
Эта статья показала мне свет : show/hide performance.
Вы хотите, чтобы это выполнялось во время загрузки страницы? $ (document) .ready() срабатывает, когда все вниз и загружено – AutomatedTester
Не нужно, мне нужно только это во время операции show/hide. Просто вставил весь скрипт –
Как раз мысль, вы пробовали использовать контексты? Если вы укажете второй аргумент в инструкции селектора, это может помочь ускорить работу. –