Canvas 上的 Pinterest 布局之类的网格化图像

Gridify Images like Pinterest Layout on Canvas

我正在使用 pixi.js 创建一个交互式应用程序。我需要将图像以 pinterest 的形式放置在屏幕上的不同容器中,例如布局或网格化它们,以便它们看起来井井有条且美观。由于我在 canvas 上工作,所以像 gridify.js 这样的插件不支持 canvas,我无法找到任何插件或代码来使它在 canvas 上工作。此外,图像需要可点击,所以我不能使用像 html 到 canvas 转换这样的插件,因为它们只生成图像。

我通过检查 gridify.js 逻辑找到了解决方案。这是我的代码:

    var items = options.items;

    var width = options.containerWidth,
    item_margin = parseInt(options.margin || 0),
    item_width = parseInt(options.max_width || options.width || 220),
    column_count = Math.max(Math.floor(width / (item_width + item_margin)), 1),
    left = column_count == 1 ? item_margin / 2 : (width % (item_width + item_margin)) / 2,
    lastHeight = 0;
    if (options.max_width) {
        column_count = Math.ceil(width / (item_width + item_margin));
        item_width = (width - column_count * item_margin - item_margin) / column_count;
        left = item_margin / 2;
    }

    for (var i = 0, length = items.length; i < length; i++) {

       var ratio = item_width / items[i].width;
        items[i].width = item_width;
        items[i].height = items[i].height * ratio;
        items[i].position.y = lastHeight + item_margin / 2;
        items[i].position.x = 0;


        lastHeight += items[i].height + (item_margin * 2);
    }

迭代所有容器并将参数传递给上述函数。它会将容器中的 images/contents 网格化。我在每个容器中使用了单列,但您可以使用 gridify.js

中的原始代码来使用多列