Skip to main content

A static class in javascript that can preload images using promises in a async manner so your main thread would not hang or slow down.

as lots of us already know that javascript is a single threaded language but in javascript you can do multiple operation in a single thread async.

async meaning you can run multiple operation in parallel without disturbing main thread  which is mainly UI thread in javascript.


promises is one way to do operation in async manner 

learn more about promises



below is my solution to preload images in a async manner in javascript




//preloading images using javascript
class Loader
{
    constructor()
    {
      this.progressCallBack=undefined;
    }
    //load all images in aysnc manner
      //load multiple images
   static async loadImages(args) {
    //a promiseArray that can hold all Promises 
    let promiseStack = [];
       
    //total images u want to load
    const totalImages = args.length;

    //number of images loading
    let loadedImages = 0;
    for (let i = 0; i < totalImages; i++) {
     
      promiseStack.push(
        new Promise((accept, reject) => {
         const image = new Image();
          image.src = args[i];
          //on each image load progess how many images you loaded yet
          image.onload = evt => {
            loadedImages++;
            const per = Number((loadedImages * 100) / totalImages);
            if (this.progressCallBack) {
              this.progressCallBack(per);
            }
            accept(evt);
          };
          //reject the promise a console back a message when a image failed to load
          image.onerror=evt=>{
            console.warn(`this image is not loaded=>${evt.target.src}`);
          }
        })
      );
    }
    

    //reslove all promise all send send back boolean you can check that all images loaded successfully
    return new Promise((accept, recject) => {
      Promise.all(promiseStack)
        .then(=> {
          accept(true);
        })
        .catch(Error => {
          reject("some images missed")
        });
    });
  }
}
//now load images in a async manner 
  const images=["https://picsum.photos/id/237/200/32",
      "https://picsum.photos/seed/picsum/200/300",
        "https://picsum.photos/200/300?grayscale",
        "https://picsum.photos/200/300/?blur",
        "https://ragingbanana.files.wordpress.com/2015/03/35f7d4fa3fdf5ae46be107004f93497a.png",
"https://www.spottedzebra.us/img/posts/2013-05-20-XAML%20Spritesheet%20Animation/scared-owl-spritesheet.png"
      ]
      Loader.loadImages(images).then((r)=>{
       // console.log(r);
      })
      Loader.progressCallBack=(p)=>{
          this.p=p;
           // console.log(this.p);
      }


    


working link -->


Comments

Popular posts from this blog

Creating a word Scramble game where you can drag and drop the word and create a complete word. (drag and drop word Scramble game).

Creating a word game using  phaser game engine which is a javascript based gaming engine  where u can drag and drop world like Word Scramble Game and complete a given word. your index.html file look like below < html > < head > < script src = "src/phaser.min.js" ></ script > < script src = "src/wordGame.js" ></ script > < script src = "src/main.js" ></ script > </ head > < body > </ body > </ html > 1.    <script src="src/phaser.min.js"></script> required to run the  phaser game engine. 2. rest of the two files deals with game logics      <script src="src/wordGame.js"></script>       <script src="src/main.js"></script> you can download whole project from https://github.com/manishchauhan/wordgame/tree/master just copy and paste the project in your local server and run ...

starting with three.js and react with a very simple example

 1. three.js is undoubtedly the best library to create interactive content for the web in 3d. link https://threejs.org/ a working sample of three with react can be found below https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js why choose threejs 1. lightweight  2.fast 3.big community  https://discourse.threejs.org/ 4. even you can use unity or unreal to publish html5 content but i don't think that would be acceptable in many cases. 5. open-source project. i created a running sample with React  https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js

A simple binary search tree with generic approach tree can store any type of data. (DFS and BFS)

 1. a binary search tree in c++ using a generic approach with both BFS and DFS approach    working tree    https://www.onlinegdb.com/edit/HkuQLdA-w code=> some properties of binary search tree-> 1. binary search tree is not always a balanced tree.  2. Inorder, traversing gives you sorted data.  3.  best is o(log n) and worst is O(n).  4. left node data is always less than root data and right node data always be greater than root data.  5. red-black tree STL map is a balanced binary search tree. *******************************************************************************/ #include <stdio.h> #include<iostream> #include<queue> using namespace std; template < typename T > class Node {   //can store any type of data private:   //genric data or store any type of data   T data;   //reference of left pointer   Node *left = nullptr;   //reference of right pointer   Node *rig...