【问题标题】:Want to show youtube like progress bar when page load想要在页面加载时显示 youtube 之类的进度条
【发布时间】:2015-10-27 01:37:51
【问题描述】:

我见过一些网站,当页面第一次加载时,会显示类似 youtube 的进度条。当进度条完成时,页面内容会以淡入效果显示。网址是https://www.skysite.com/

我已经检查了许多类似 youtube 的进度条链接,但这些页面显示的进度条和您一样,但它们与页面内容无关。

以下是我查阅过的一些链接。

http://stackoverflow.com/questions/18350370/youtube-like-progress-bar
http://onextrapixel.com/examples/youtube-like-ajax-loading-bar/index5.html
http://jsfiddle.net/ajaSB/3/
http://thuru.net/2014/10/05/youtube-like-progress-bar-using-nprogress-js-with-angular-js/
http://ricostacruz.com/nprogress/

请指导我如何显示类似 youtube 的进度条,当进度完成时我想显示页面内容。

【问题讨论】:

  • 您所指的网站使用的是pace
  • 假设我的页面内容很大并且需要时间来加载。所以我想在页面内容将并排加载时显示 youtube 之类的进度条。我希望进度条进度长度和页面内容下载之间必须同步。假设当 15% 的页面内容下载完成时,进度长度将为 15%。正在寻找如何实现它的想法,特别是不知道如何在页面内容下载和进度条进度长度之间同步。

标签: javascript jquery youtube progress-bar


【解决方案1】:

您所指的网站正在使用速度 - https://github.com/HubSpot/pace/

它监听所有 ajax 请求和 dom 加载,并在隐藏页面时显示进度条。加载完所有内容后,它会显示内容。

你可以预览这个库的一个例子here(是的,inception power)

来自 cmets 的更新:

您有 2 个帐户吗?
正如我已经所说,这个库做到了。它跟踪脚本本身之后加载的 EVERY 个字节。它易于自定义,并且有一个阅读清晰文档。它允许您查看 dom 元素 加载进度、images/scripts/ajax 内容进度,甚至是您的长脚本

如果您只有主要的 html 页面,那么您应该考虑更改您的设计并进行小块重构。
如果您不能并且仍想跟踪进度,您可以在页面顶部放置一个简单的脚本:

  • 使用 ajax 为同一页面发送 HEAD http 请求。只是想知道您的总页面大小(Content-Length 标题)。
  • 根据当前页面大小显示进度(多种跟踪方式,最简单的类似document.firstElementChild.innerHTML.length(不会很精确))
  • 加载页面后,移除进度条

我给了你一切你需要的东西。

编辑2:

我觉得你会要求更多...这是一个 NodeJs 示例。 它只是简单地创建一个 http 服务器,并提供一个带有分块内容的页面(并模拟滞后......)。所以整个页面需要时间来加载。 javascript实时显示文本进度。

var http = require('http');

function chunked(res, count) {
    res.write('<p>Chunked content n°' + count + '</p>');
    setTimeout(function() {
        if(count > 0)
            chunked(res, count - 1);
        else
            res.end('</body></html>');
    }, 1000);
}

function handleRequest(request, response){
    response.setHeader('Connection', 'Transfer-Encoding');
    response.setHeader('Content-Type', 'text/html; charset=utf-8');
    response.setHeader('Transfer-Encoding', 'chunked');


    response.write('<html><head><script>\n' +
        'var progress = 0; startLength = 825; TotalLength = 1090;\n' +
        'function track_progress() {\n' +
        '    console.log(document.firstElementChild.innerHTML.length);' +
        '    if(progress > 1000) {' +
        '        document.body.firstElementChild.innerHTML = "Progress: 100% - Done !";\n' +
        '        return;\n' +
        '    }\n' +
        '    \n' +
        '    if(document.body) {\n' +
        '        progress = (document.firstElementChild.innerHTML.length - startLength)* 1000 / (TotalLength - startLength);\n'+
        '        document.body.firstElementChild.innerHTML = "Progress: " + (Math.round(progress)/10) + "%";\n' +
        '    }\n' +
        '    setTimeout(track_progress, 500);\n' +
        '}\n' +
        'track_progress();\n' +
    '</script></head><body><p id="progress">Progress: 0%</p>');

    response.write('<p>Starting to send chunked content...</p>');
    chunked(response, 10);
}

var server = http.createServer(handleRequest);
server.listen(8080, function(){
    console.log("Server listening on: http://localhost:8080");
});

【讨论】:

  • 页面数据下载时是否可以显示进度条。假设页面数据或内容下载 15%,那么进度条进度也将是 15%。我们可以开发这种实时进度条吗?寻求指导。
  • Javascript 被浏览器尽快解释。因此它能够跟踪每次加载。该插件完成所有跟踪过程,并允许以非常简单的方式自定义渲染。
  • 假设我的页面内容很大并且需要时间来加载。所以我想在页面内容将并排加载时显示 youtube 之类的进度条。我希望进度条进度长度和页面内容下载之间必须同步。假设当 15% 的页面内容下载完成时,进度长度将为 15%。正在寻找如何实现它的想法,特别是不知道如何在页面内容下载和进度条进度长度之间同步。
【解决方案2】:

当您的页面正在加载时,显示一个进度条。 加载内容后,隐藏进度条。 您可以使用 JQwidgets 之类的库来创建进度条。

【讨论】:

  • 假设我的页面内容很大并且需要时间来加载。所以我想在页面内容将并排加载时显示 youtube 之类的进度条。我希望进度条进度长度和页面内容下载之间必须同步。假设当 15% 的页面内容下载完成时,进度长度将为 15%。正在寻找如何实现它的想法,特别是不知道如何在页面内容下载和进度条进度长度之间同步。
【解决方案3】:

一个选项:

  1. 重定向到带有空白进度条的空白页面。

  2. 使用 javascript 将进度条从 0% 填充到 100%。

  3. 然后使用 javascript 重定向到您的内容页面。

另一种选择:

  1. 隐藏页面上的所有内容(也许使用 javascript 将“隐藏”添加到 div ——有很多方法可以做到这一点)

  2. ...除了进度条。从 0% 填充到 100%。

  3. 使用 javascript 隐藏进度条并显示您的所有内容。

【讨论】:

  • 假设我的页面内容很大并且需要时间来加载。所以我想在页面内容将并排加载时显示 youtube 之类的进度条。我希望进度条进度长度和页面内容下载之间必须同步。假设当 15% 的页面内容下载完成时,进度长度将为 15%。正在寻找如何实现它的想法,特别是不知道如何在页面内容下载和进度条进度长度之间同步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多