Blog

Preloader? Easy!

2016-08-11

All right, guys. Raise your hands if you don’t know what preloader is. I assume no one did, but if someone’s shaking hand is in the air, then why don’t you press the Reset button on your computer and enjoy looking at a very real preloader.

And for those of you who have just grinned and ignored my bad advice, let’s continue the lesson.

It is amazing that when a programmer makes an application, he or she always wants to add a loading bar to it. Just in case someone might think that the program got stuck and not downloading terabytes of data from the Internet. It feels nice, you know, to think that the user takes in the view of a slowly crawling strip and not curses clumsy developers. So let us start the lesson and grasp this preloader thing.

A Bit of Theory

A preloader works in a close connection with a loader which is implemented in Blend4Web as the load function of the data module. The structure of a loader usually looks like this:

var m_data      = require("data");
var m_preloader = require("preloader");

function load() {
    m_data.load("filename.json", load_cb, preloader_cb);
}

function load_cb(data_id) {

}

function preloader_cb(percentage) {

}

Here, the load function fires two events first one of which is called after loading the file, while the second one constantly returns the numeric value of the progress. Because of this, the core work with the preloader should be done in the preloader_cb event handler.

Preloader in Two Seconds

Don’t believe? We'll only need these two commands:

m_preloader.create_preloader();
m_preloader.update_preloader();

Simple "strip" made in just two seconds!

Using them, you can create a simple loading bar very quickly and with no effort at all. Here’s a working example:

var m_data      = require("data");
var m_preloader = require("preloader");

function load() {
    m_preloader.create_preloader();
    m_data.load("filename.json", load_cb, preloader_cb);
}

function load_cb(data_id) {

}

function preloader_cb(percentage) {
    m_preloader.update_preloader(percentage);
}

Turning On Overdrive

The developers have also provided some features that may help us to diversify preloader’s basic palette.

Just a few options, and the screen has "bloomed".

All you have to do is define the colors using the create_preloader() function:

var m_data      = require("data");
var m_preloader = require("preloader");

function load() {
    m_preloader.create_preloader({
        container_color:"#a0e5ff", // background color of the container 
        bar_color:"#fa200", // background color of the bar 
        frame_color: "#f35600", // color of the frame border
        font_color: "#000" // color of the font
    });
    m_data.load("filename.json", load_cb, preloader_cb);
}

function load_cb(data_id) {

}

function preloader_cb(percentage) {
    m_preloader.update_preloader(percentage);
}

Expert Mode

You can achieve a better result if you decide to make your own preloader.

The loading screen from the game "Petigor’s Tale"

A few months ago the Blend4Web developers announced the release of a browser game called «Petigor’s Tale». The game is open source, and its source files are available in the SDK package, so you can not only enjoy the interesting gameplay and colorful environments of the game made with Blend4Web engine, but also take a look at its inner structures.

A certain fragment of Petigor's program code can serve as an excellent example of creating your own preloader.

At the base level the loading scheme here is the same as the one mentioned above, but it does not use any functions from the preloader module. Instead, the idea of it lies in the synergy of the JavaScript code and HTML and CSS. Let’s see how all this works.

HTML file

An application canvas and a loading screen can be separate HTML elements, and that’s how it is done in Petigor. This allows us to easily control these elements using JavaScript:

<body>
    <div id="main_canvas_container"></div>
    <div id="preloader_cont">
        <div id="prelod_static_path">
        <div id="prelod_dynamic_path"></div>
            <span>0%</span>
        </div>
    </div>
</body>

Here, the "main_canvas_container" element is the application canvas, while "preloader_cont" handles the loading screen.

CSS file

Of course, it is always better to describe the style of a web page in a CSS file. I won’t go into details of this process and will simply cite a fragment of Petigor’s code:

div#prelod_static_path {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 395px;
    height: 134px;
    margin-left: -197px;
    margin-top: -75px;
}
div#prelod_dynamic_path {
    position: absolute;
    left: 0;
    top: 0;
    width: 0%;
    height: 100%;
    background-image: url(images/loader_bar_line.png);
}
div#preloader_cont {
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    background-image: url(images/preloader_bg.jpg);
    background-color: #171717;
    background-repeat: no-repeat;
    background-position: center center;
    visibility: hidden;
}

It describes every element that is used to form the loading screen. Take a note of the visibility option of the #preloader_cont block. Using this very option, we can control the showing of the loading screen.

JavaScript file

The loading screen is activated before starting the loading. The getElementById() function returns an HTML element, then we change its visibility style parameter (see the CSS listing).

function load() {
    var preloader_cont = document.getElementById("preloader_cont");
    preloader_cont.style.visibility = "visible";
    m_data.load("filename.json", load_cb, preloader_cb);
}

As the preloader_cb function returns percentage of the completed loading, we can use it to redraw certain parts of the screen.

In the example below, the width parameter of the style describing the loading strip is constantly changing. Its initial value is equal to zero, and it is changing dynamically in accordance with the percentage variable. The numeric value of the loading process is changing in the same way.

Please note that you will have to hide the preloader_cont HTML element after the loading is finished.

function preloader_cb(percentage) {
    var prelod_dynamic_path = document.getElementById("prelod_dynamic_path");
    var percantage_num      = prelod_dynamic_path.nextElementSibling;

    prelod_dynamic_path.style.width = percentage + "%";
    percantage_num.innerHTML = percentage + "%";	   
    if (percentage == 100) {
        var preloader_cont = document.getElementById("preloader_cont");
	preloader_cont.style.visibility = "hidden";
        return;
    }
}

This is just an example of creating your own preloader. Remember that every feature of modern browsers, including HTML5, CSS3, jQuery (complement this list yourselves), are at your service when you are using Blend4Web. It is here where flexibility and power of our favorite framework truly manifests. We wish you luck in creating great preloaders!

Comments
21 aug. 2016 20:22
Very nice. I have been meaning to work on a good pre-loader.
05 sep. 2016 18:43
Awesome! Although I got an error that create_preloader(); was not a function. I fixed it by swapping out the "create_preloader();" with "create_simple_preloader();"
06 sep. 2016 15:48
I got an error that create_preloader(); was not a function
Hi, gabe. This function was added in version 16.07. I think you're using an outdated SDK.
07 may. 2017 07:14
Great blog!
18 sep. 2017 14:19
HI, my preloader is loading but my json is not loading, any solution
18 sep. 2017 18:34
Are you getting any errors in your browser console console?
05 may. 2020 04:55
Hi, where I need to create this functions? In html file ? Or another file and upload in the same directory of the HTML ?
05 nov. 2022 10:14
If you have an Android phone and you have downloaded a lot of apps, then you may have come across Preloader. This is a small program that helps you speed up your phone by loading all the apps before the main one and replying when the main app asks for permission to access the Internet. Go to basement waterproofing atlanta for best services. Preloaders can be used to display loading messages and logos. Preloaders are usually placed on top of the page or at the bottom of the page.
12 dec. 2022 09:28
Preloaders are a good idea. Because I’m a big fan of SEO and I want to get the most out of my website. However, I think there’s room for improvement, which is why I think the preloader should be improved. Try this technology consulting parkersburg for best technology consulting. First off, the preloader should show all the ads that you have on your site so that when people click on one of those ads they will go to your main page instead of getting redirected to another page with ads.
14 oct. 2023 10:36
Preloader? Piece of cake! It's a simple yet crucial element in web development that ensures a smoother user experience by loading essential assets before the main content. Don't underestimate its importance in optimizing your college application essay writing service website's performance.
Please register or log in to leave a reply.