Cómo dibujar imágenes en un lienzo html en un bucle

Psionman

Estoy tratando de dibujar imágenes en un lienzo en un bucle.

En el siguiente código, si hago clic en Siguiente, las 5 imágenes aparecen una tras otra. Si hago clic en Todo, solo aparece la última imagen

¿Qué está mal?

<html>
<head>
    <style>
        .display-grid{
            display: grid;
            grid-template-columns: auto auto auto auto;
            padding: 10px;
        }
    </style>
</head>
<body>

    <div id="my-grid">
        <div class="display-grid">
            <span><canvas class="canvas" id="display-0"></canvas></span>
            <span><canvas class="canvas" id="display-1"></canvas></span>
            <span><canvas class="canvas" id="display-2"></canvas></span>
            <span><canvas class="canvas" id="display-3"></canvas></span>
            <span><canvas class="canvas" id="display-4"></canvas></span>
        </div>
    </div>
    <button id="next-image">Next</button>
    <button id="all-images">All</button>

<script type="text/javascript">
    last_image = -1
    var next_button= document.getElementById('next-image');
    var all_button= document.getElementById('all-images');
    next_button.onclick = function(){nextImage()};
    all_button.onclick = function(){allImages()};

    function nextImage() {
        last_image ++
        var canvas = document.getElementById('display-'+last_image.toString());
        var context = canvas.getContext('2d');
        var imageObj = new Image();

        imageObj.onload = function() {
            context.drawImage(imageObj, 0, 0);
        };
        imageObj.src = 'image_'+last_image.toString()+'.png';
    }

    function allImages() {
        for (index = 0; index < 5; index++) {
            var canvas = document.getElementById('display-'+index.toString());
            var context = canvas.getContext('2d');
            var imageObj = new Image();

            imageObj.onload = function() {
                context.drawImage(imageObj, 0, 0);
            };
            imageObj.src = 'image_'+index.toString()+'.png';
        }
    }
</script>

</body>
</html>
Kokodoko

Sucede porque la onloadfunción no se llama en el mismo orden que el bucle. Algunas imágenes pueden tardar más en cargarse que otras.

Puede solucionarlo comprobando el nombre de la imagen para saber qué imagen está cargada, y luego sabrá en qué lienzo debe dibujarse.

function allImages() {
    for (let index = 0; index < 5; index++) {
        let imageObj = new Image();
        imageObj.name = "display-"+index

        imageObj.onload = function() {
            console.log("loaded : " + this.name)
            let canvas = document.getElementById(this.name);
            let context = canvas.getContext('2d');
            context.drawImage(this, 0, 0);
        };

        imageObj.src = 'image_'+index+'.png';
    }
}

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

PyGame - cómo dibujar imágenes en un bucle

PyGame - cómo dibujar imágenes en un bucle

Cómo dibujar varias imágenes en un lienzo y guardar el lienzo como imagen png

¿Cómo dibujar un óvalo en lienzo html5?

Cómo mostrar imágenes en un bucle en HTML

Java: ¿Cómo dibujar en un lienzo?

Problemas para dibujar círculos en un lienzo HTML

¿Cómo dibujar dos imágenes con estilo en lienzo?

¿Cómo escalar imágenes en un lienzo html5 con una mejor interpolación?

¿Cómo poner imágenes superpuestas en un lienzo html5?

HTML5 Canvas - Cómo dibujar un rectángulo sobre una imagen en un lienzo

¿Cómo dibujar una imagen PIL en un lienzo DearPyGui?

¿Cómo dibujar un rectángulo enmarcado en lienzo?

¿Cómo dibujar un icono de etiqueta en el lienzo?

Dibujar un punto en un lienzo HTML5

¿Cómo dibujar polígonos en un lienzo HTML5?

Cómo dibujar iconos de Font Awesome en un lienzo html [Versión <5]

Dibujar un rectángulo en un lienzo

cómo cifrar imágenes en un bucle for con python

¿Cómo agregar imágenes a RichTextBox en un bucle?

dibujar 4 círculos en un lienzo en reactjs

Dibujar texto rotado en un lienzo HTML5

¿Cómo arreglar imágenes deformadas / distorsionadas y recortadas en un objeto de lienzo HTML con javascript?

Dibujar un círculo borroso en el lienzo (QML / Javascript)

Cómo volver a dibujar: reiniciar un bucle en Processing

¿Cómo dibujar un svg en línea (en DOM) a un lienzo?

en Firemonkey, ¿cómo dibujar un mapa de bits enmascarado en un lienzo?

lienzo html5 dibujar líneas en un círculo

Cómo imprimir imágenes en un bucle en html, el código se comparte a continuación

TOP Lista

CalienteEtiquetas

Archivo