简体   繁体   English

javascript预加载器/进度/百分比

[英]javascript preloader/progress/percentage

I'm having trouble finding any good information on how to make a javascript(or jquery) progress bar WITH text that tells you the percentage. 我无法找到有关如何制作javascript(或jquery)进度条的任何好信息,其中包含告诉您百分比的文本。

I don't want a plug in, I just want to know how it works so that I can adapt it to what I need. 我不想插件,我只想知道它是如何工作的,这样我就可以根据我的需要进行调整。 How do you preload images and get a variable for the number of images that are preloaded. 如何预加载图像并获取预加载图像数量的变量。 Also, how do you change html/css and-or call a function, based on the number of images that are loaded already? 另外,如何根据已加载的图像数量更改html / css和/或调用函数?

<img> elements have an onload event that fires once the image has fully loaded. <img>元素有一个onload事件,一旦图像完全加载就会触发。 Therefore, in js you can keep track of the number of images that have loaded vs the number remaining using this event. 因此,在js中,您可以跟踪已加载的图像数量与使用此事件的剩余数量。

Images also have corresponding onerror and onabort events that fire when the image fails to load or the download have been aborted (by the user pressing the 'x' button). 图像也有相应的onerroronabort事件,当图像无法加载或下载中止时(用户按下'x'按钮)会触发。 You also need to keep track of them along with the onload event to keep track of image loading properly. 您还需要跟踪它们以及onload事件以正确跟踪图像加载。


Additional answer: 补充答案:

A simple example in pure js: 纯js中的一个简单示例:

var img_to_load = [ '/img/1.jpg', '/img/2.jpg' ];
var loaded_images = 0;

for (var i=0; i<img_to_load.length; i++) {
    var img = document.createElement('img');
    img.src = img_to_load[i];
    img.style.display = 'hidden'; // don't display preloaded images
    img.onload = function () {
        loaded_images ++;
        if (loaded_images == img_to_load.length) {
            alert('done loading images');
        }
        else {
            alert((100*loaded_images/img_to_load.length) + '% loaded');
        }
    }
    document.body.appendChild(img);
}

The example above doesn't handle onerror or onabort for clarity but real world code should take care of them as well. 上面的例子不能处理onerroronabort为清楚,但现实世界中的代码应该照顾他们的为好。

What about using something below: 使用以下内容怎么样:

$('#btnUpload').click(function() {
    var bar = document.getElementById('progBar'),
        fallback = document.getElementById('downloadProgress'),
        loaded = 0;

    var load = function() {
        loaded += 1;
        bar.value = loaded;

        /* The below will be visible if the progress tag is not supported */
        $(fallback).empty().append("HTML5 progress tag not supported: ");
        $('#progUpdate').empty().append(loaded + "% loaded");

        if (loaded == 100) {
            clearInterval(beginLoad);
            $('#progUpdate').empty().append("Upload Complete");
            console.log('Load was performed.');
        }
    };

    var beginLoad = setInterval(function() {
        load();
    }, 50);

});

JSFIDDLE 的jsfiddle

You might also want to try HTML5 progress element: 您可能还想尝试HTML5进度元素:

<section>
<p>Progress: <progress id="p" max=100><span>0</span>%</progress></p>

<script>
var progressBar = document.getElementById('p');

function updateProgress(newValue) {
progressBar.value = newValue;
progressBar.getElementsByTagName('span')[0].textContent = newValue;
} </script>
</section> 

http://www.html5tutorial.info/html5-progress.php http://www.html5tutorial.info/html5-progress.php

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM