代码之家  ›  专栏  ›  技术社区  ›  nshaw

如何避免JQuery AJAX对快速结果的“眨眼”进度div?

  •  7
  • nshaw  · 技术社区  · 16 年前

    我正在使用jquery对asp.net后端的ajax调用 this approach . 我使用.ajaxstart和.ajaxstop来显示和隐藏进度指示器。当ajax请求很快完成时,进度指示器“闪烁”,因为它显示的时间不够长。

    一种可能的解决方案是只在最短时间后显示(如ms ajax中的updateprogress.displayAfter)。另一个方法是确保指示器显示最短时间。不幸的是,jquery Pause plug-in 似乎不起作用,并影响延迟技巧,如 this 也不要工作。基于javascript settimeout的某种解决方案类似于 this SO answer 似乎最有可能,但问题是ajax调用一直在处理。因此,当进度指示器仍然可见时,将显示结果。

    那么,能做到吗?如果是,怎么做?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Bryan A    16 年前

    在使用ajax和进度指标的项目的早期阶段,您当然会有闪烁的效果,因为您(希望)在测试时没有处理大量的数据。你会发现,随着你的项目得到越来越多的数据,进度指标将停留越来越长。我不建议故意创建一个延迟来保留进度指示器,因为它会降低用户体验。尝试使用javascript setTimeout()函数。

        2
  •  2
  •   James Frost    15 年前

    请尝试以下操作:

    $("#spinner")
        .bind("ajaxSend", function() {
                $(this).fadeIn(1000);
        })
        .bind("ajaxComplete", function(){
            $(this).stop();
            $(this).hide();
        });
    

    其思想是,在微调器中使用延时(在本例中为1000)淡入,然后取消动画并在ajaxcomplete上隐藏。

    如果您想做一个延迟的显示,您可以尝试使用animate()而不是fade()并链接调用(例如$(this).animate(/*something here*/).show())

    希望这有帮助!