Alterar quantidade item por linha vitrine conforme tamanho da tela

Não, vou criar um Script que atende melhor a sua necessidade, ao invés de agrupar por linha, vamos juntar todos os produtos daquela vitrine em um único elemento pai e limitar o tamanho do item por CSS, sem Script, não por questão de performance, mas diminui a complexidade e a possibilidade de erros. Antes de inserir esse novo, pode apagar aquele antigo junto com seus estilos.

CSS (Usando Grid - Recomendado):

#listagemProdutos .listagem-linha > ul {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
}

#listagemProdutos .listagem-linha > ul > li {
    width: auto;
    margin: 0;
}

@media (min-width: 800px) {
    /* 3 itens */
    #listagemProdutos .listagem-linha > ul {
        grid-template-columns: repeat(3, minmax(0, 1fr));
    }
}

@media (min-width: 1366px) {
    /* 4 itens */
    #listagemProdutos .listagem-linha > ul {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

@media (min-width: 1920px) {
    /* 5 itens */
    #listagemProdutos .listagem-linha > ul {
        grid-template-columns: repeat(5, minmax(0, 1fr));
    }
}

CSS (Usando Flexbox):

#listagemProdutos .listagem-linha > ul {
    display: flex;
    flex-wrap: wrap;
}

#listagemProdutos .listagem-linha > ul > li {
    width: calc(100% / 2 - 10px); /* ou width: calc(50% - 10px); */
    margin: 0 0 10px 10px;
}

@media (min-width: 800px) {
    /* (100% da vitrine / 3 itens) - 10px -> Corresponde ao espaçamento do item */
    #listagemProdutos .listagem-linha > ul > li {
        width: calc(100% / 3 - 10px); /* ou width: calc(33.333333% - 10px); */
    }
}

@media (min-width: 1366px) {
    /* (100% da vitrine / 4 itens) - 10px -> Corresponde ao espaçamento do item */
    #listagemProdutos .listagem-linha > ul > li {
        width: calc(100% / 4 - 10px); /* ou width: calc(25% - 10px); */
    }
}

@media (min-width: 1920px) {
    /* (100% da vitrine / 5 itens) - 10px -> Corresponde ao espaçamento do item */
    #listagemProdutos .listagem-linha > ul > li {
        width: calc(100% / 5 - 10px); /* ou width: calc(20% - 10px); */
    }
}

JS:

$('#listagemProdutos > ul').each(function() {
    let html = '<li class="listagem-linha"><ul>';

    $(this).find('.listagem-linha').each(function() {
        html += $(this).find('ul').html();
    });

    html += '</ul></li>';

    $(this).html(html);
});

Espero ter ajudado, até mais.

2 curtidas