当前位置: 首页 > 面试题库 >

在单页网站中使用jquery ajax加载页面时显示进度条

滕弘新
2023-03-14
问题内容

我有一个基本页面,顶部有一个导航栏,还有一个包装器主体。

每当用户单击导航链接时,它都会用于.load将页面内容加载到包装div中。

$(this).ajaxStart(function(){$('.progressbar .bar').css('width','5%');$('.progressbar').fadeIn();});
$(this).ajaxEnd(function(){$('progressbar').hide();});

$('.ajaxspl').on('click',function(e){
    e.preventDefault();

    var url=$(this).data('url'),
        wrap=$('body #wrap');

    //clean the wrapper
    wrap.slideUp().html('');

    //load page into wrapper
    wrap.load(url,function(){wrap.slideDown();});
});

来自的返回值示例.load

<div>
...content
</div>
<script>$('.progressbar .bar').css('width','30%');</script>
<link href="/assets/css/datepicker.css" rel="stylesheet" />
<script>$('.progressbar .bar').css('width','60%');</script>
<link href="/assets/css/main.css" rel="stylesheet" />
<script>$('.progressbar .bar').css('width','90%');</script>
<script>//blah blah</script>

如您所见,我在上显示了一个Bootstrap进度条,在ajaxstart()我调用的页面上,加载每个项目后,我都会修改进度条的值。

这在Firefox上效果很好,在等待页面加载时可以看到进度条,但在Chrome或IE上不起作用。

有一个更好的方法吗?我是正确执行此操作还是有其他方法执行此操作?

例如,获取$.ajax以kb为单位的页面大小并在接收到数据时动态更新进度条?

我正在尝试加载Gmail时产生类似于“加载”页面的内容。


问题答案:

请允许我引用此页面,它描述了如何在jquery中将progress event侦听器添加到xhr对象(仅在这些浏览器中有效,在较旧的浏览器中您仅依赖于当前使用的基础)。

作为参考,我复制了以下相关代码(您可能只对“下载进度”部分感兴趣):

$.ajax({
  xhr: function()
  {
    var xhr = new window.XMLHttpRequest();
    //Upload progress
    xhr.upload.addEventListener("progress", function(evt){
      if (evt.lengthComputable) {
        var percentComplete = evt.loaded / evt.total;
        //Do something with upload progress
        console.log(percentComplete);
      }
    }, false);
    //Download progress
    xhr.addEventListener("progress", function(evt){
      if (evt.lengthComputable) {
        var percentComplete = evt.loaded / evt.total;
        //Do something with download progress
        console.log(percentComplete);
      }
    }, false);
    return xhr;
  },
  type: 'POST',
  url: "/",
  data: {},
  success: function(data){
    //Do something success-ish
  }
});

请允许我说,尽管对于单页网站来说这是一个很大的矫and过正,并且仅对大文件才真正有用。另外,无法通过这种方式处理图像和类似媒体,因此您需要监视图像的加载(或自己通过Ajax进行加载)以使这样的系统完美。

这是一个JSFiddle,它正在运行中:http://jsfiddle.net/vg389mnv/1/



 类似资料:
  • 我的jsp中有一个这样的tr。 我也有这样的选择。 select中使用的javascript函数如下所示。 因此,如果所选行不是0,我将不会在页面中显示tr。这很好用 我在请求中设置了dateRange变量。setAttribute()并从操作发送它 问题是从请求值中正确地选择了选项,但是没有显示tr 我尝试在jsp中的表单外部这样运行它,希望它能在页面加载之前执行,但没有发生。 有什么想法吗?

  • 问题内容: 为了使IM Client始终保持登录状态,Facebook通过在将页面插入文档之前使用AJAX加载页面来避免整个页面加载。 但是,在Facebook AJAX请求期间,浏览器似乎正在加载。重新加载按钮变为X,浏览器中内置的进度指示器指示正在加载/正在等待等) 我已经能够成功实现基于AJAX的导航,但是我的浏览器没有显示任何加载迹象(由于请求是异步的),Facebook如何做到这一点?

  • 本文向大家介绍Android中WebView加载网页设置进度条,包括了Android中WebView加载网页设置进度条的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android中WebView加载网页设置进度条的具体代码,供大家参考,具体内容如下 效果: xml: pg.xml Java文件: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 在某个AngularJS视频中,我看到了如何避免在Javascript解析表达式之前将其可见。但是我不记得它是怎么做到的… 我有一个,我想说“正在加载…” AngularJS有机会来分析它。如何才能做到这一点? 问题答案: 就像其他人提到的那样,使用ng-cloak,但是如果它是第一个加载到您的页面中的内容,还可以将以下内容添加到您的CSS中。 这将确保您的div模板是隐藏的。在该di

  • 问题内容: 我的网站上有一个版块,在进行一些密集的通话时加载速度很慢。 知道如何div在页面准备时显示类似于“加载”的内容,然后在一切准备就绪时消失吗? 问题答案: 我需要这个,经过一番研究,我想到了这个(需要jQuery): 首先,在标签之后添加以下代码: 然后将div和图片的样式类添加到CSS: 然后,将此JavaScript添加到您的页面中(当然,最好在页面结尾处,在结束

  • 问题内容: 我有一个PHP include,它需要一段时间才能加载,因为PHP必须获取很多数据。我不想放慢整个网页的加载,以等待包含此内容,那么如何使用ajax加载该包含内容呢?我不希望通过单击按钮来触发Ajax,而只是希望它在页面加载时加载包含,因此,如果您查看下面的示例,则会在显示内含代码的同时显示“更多HTML内容”。 php仍在加载中。 问题答案: 如果您使用的是jQuery,则可以使用他