Preloading images with JavaScript

后端 未结 14 1243
太阳男子
太阳男子 2020-11-22 03:17

Is the function I wrote below enough to preload images in most, if not all, browsers commonly used today?

function preloadImage(url)
{
    var img=new Image(         


        
14条回答
  •  不知归路
    2020-11-22 03:45

    Solution for ECMAScript 2017 compliant browsers

    Note: this will also work if you are using a transpiler like Babel.

    'use strict';
    
    function imageLoaded(src, alt = '') {
        return new Promise(function(resolve) {
            const image = document.createElement('img');
    
            image.setAttribute('alt', alt);
            image.setAttribute('src', src);
    
            image.addEventListener('load', function() {
                resolve(image);
            });
        });
    }
    
    async function runExample() {
        console.log("Fetching my cat's image...");
    
        const myCat = await imageLoaded('https://placekitten.com/500');
    
        console.log("My cat's image is ready! Now is the time to load my dog's image...");
    
        const myDog = await imageLoaded('https://placedog.net/500');
    
        console.log('Whoa! This is now the time to enable my galery.');
    
        document.body.appendChild(myCat);
        document.body.appendChild(myDog);
    }
    
    runExample();
    

    You could also have waited for all images to load.

    async function runExample() {
        const [myCat, myDog] = [
            await imageLoaded('https://placekitten.com/500'),
            await imageLoaded('https://placedog.net/500')
        ];
    
        document.body.appendChild(myCat);
        document.body.appendChild(myDog);
    }
    

    Or use Promise.all to load them in parallel.

    async function runExample() {
        const [myCat, myDog] = await Promise.all([
            imageLoaded('https://placekitten.com/500'),
            imageLoaded('https://placedog.net/500')
        ]);
    
        document.body.appendChild(myCat);
        document.body.appendChild(myDog);
    }
    

    More about Promises.

    More about "Async" functions.

    More about the destructuring assignment.

    More about ECMAScript 2015.

    More about ECMAScript 2017.

提交回复
热议问题