Объекты Canvas не исчезают, когда находятся вне области видимости - PullRequest
0 голосов
/ 15 мая 2018

У меня есть следующий код, который очень часто создает холст, помещает на него изображение колбы и меняет все желтые пиксели на цвет, который передается. Когда цвет колбы меняется, вы все еще можетеувидеть все старые объекты canvas в консоли в safari на вкладке canvas.Значит ли это, что они занимают память?Разве они не должны исчезнуть, когда они выходят из области видимости (когда цвет меняется и используется новая лампочка)?

// Set colour of light bulb
function set_bulb_colour(img_id, rgb_colour)
{
    // Load the light bulb image in and redraw it with the new colour
    var img = new Image();

    img.onload = function()
    {
        var canvas = document.createElement('canvas');

        canvas.width = img.width;
        canvas.height = img.height;

        var ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0);

        var image_data = ctx.getImageData(0, 0, canvas.width, canvas.height);

        for (var i = 0; i < image_data.data.length; i += 4)
        {
            // If the pixel is yellow set it to the new colour
            if (image_data.data[i + 3] != 0 && (image_data.data[i] > 200 && image_data.data[i + 2] < 100))
            {
                image_data.data[i] = rgb_colour[0];
                image_data.data[i + 1] = rgb_colour[1];
                image_data.data[i + 2] = rgb_colour[2];
            }
        }

        ctx.putImageData(image_data, 0, 0);

        // Set the image src to the bulb with the new colour
        $(img_id).attr('src', canvas.toDataURL());
    }

    img.src = 'images/light_bulb.png';
}

Здесь вы можете видеть, что есть несколько холстов ', фиолетовый и красный исчезлии розовый теперь отображается, но красный и фиолетовый не исчезают, они занимают память?Каждый раз, когда цвет меняется, новый холст добавляется в очередь, я ожидал, что старые будут удалены.Надеюсь, я объяснил, что все в порядке.

edit: imd_id всегда одинаков в минуту, поэтому новое изображение просто заменяет старое.

...