Tengo JavaScript así:

items.forEach(function (item, index, arr) {
                console.log(item.price);
                var message = 'BitSkins Price: $' + item.bprice + '';
                if (item.price != null) {
                    if (item.bprice == '') {
                        message = 'Item never sold on BitSkins!';
                    }
                    if (item.name != 'Operation Phoenix Case Key' && item.name != 'CS:GO Case Key' && item.name != 'Winter Offensive Case Key' && item.name != 'Revolver Case Key' && item.name != 'Operation Vanguard Case Key' && item.name != 'Operation Wildfire Case Key' && item.name != 'Shadow Case Key' && item.name != 'Operation Breakout Case Key' && item.name != 'Chroma Case Key' && item.name != 'Huntsman Case Key' && item.name != 'Falchion Case Key' && item.name != 'Chroma 2 Case Key') {
                        $("#inventory").html($("#inventory").html() + "<li class='col 2' style='padding:8px;font-weight:bold;font-size:16px'><div class='card item-card waves-effect waves-light' style='margin:0%;min-height:295px;width:245.438px;border-radius: 15px;' id='" + item.id + "'><div class='iteam' style='text-decoration: underline;text-align: left'>" + item.name + "</div><div class='condition' style='text-align: left;text-size:13px'>" + item.condition + "</div><div class='center-align' style='padding:6%'><img title=\"" + item.originalname + "\" draggable='false' src='https://steamcommunity-a.akamaihd.net/economy/image/" + item.iconurl + "/200fx200'><div class 'floatvalue'>Float: 0.11503319442272186<div class='bitskinscomp' style='font-weight: normal;font-size:12px'>" + message + "</div><div class='buyer-price center-align'>$" + numberWithCommas(item.price) + "</li></div></div>");
                    }
                }
            });

Que agrega cada item en la matriz al html y luego se muestra allí. La matriz items contiene JSON, que podría ser 1000 elementos diferentes. ¿Cómo podría agregar infinite scroll en ese JavaScript? Ejemplo: Mostrará los primeros 50 elementos, luego si desplaza otros 50 .. Además, ordénelos por el precio (ya lo tengo en el código).

5
Jacob Revestus 7 may. 2016 a las 15:03

4 respuestas

La mejor respuesta

Puedes hacerlo fácilmente así:

var perPage = 50;

function paginate(items, page) {
  var start = perPage * page;
  return items.slice(start, start + perPage);
}

function renderItems(pageItems) {
  pageItems.forEach(function (item, index, arr) {
    var message = 'BitSkins Price: $' + item.bprice + '';
    if (item.price != null) {
      if (item.bprice == '') {
        message = 'Item never sold on BitSkins!';
      }
      if (item.name != 'Operation Phoenix Case Key' && item.name != 'CS:GO Case Key' && item.name != 'Winter Offensive Case Key' && item.name != 'Revolver Case Key' && item.name != 'Operation Vanguard Case Key' && item.name != 'Operation Wildfire Case Key' && item.name != 'Shadow Case Key' && item.name != 'Operation Breakout Case Key' && item.name != 'Chroma Case Key' && item.name != 'Huntsman Case Key' && item.name != 'Falchion Case Key' && item.name != 'Chroma 2 Case Key') {
        $("#inventory").append("<li class='col 2' style='padding:8px;font-weight:bold;font-size:16px'><div class='card item-card waves-effect waves-light' style='margin:0%;min-height:295px;width:245.438px;border-radius: 15px;' id='" + item.id + "'><div class='iteam' style='text-decoration: underline;text-align: left'>" + item.name + "</div><div class='condition' style='text-align: left;text-size:13px'>" + item.condition + "</div><div class='center-align' style='padding:6%'><img title=\"" + item.originalname + "\" draggable='false' src='https://steamcommunity-a.akamaihd.net/economy/image/" + item.iconurl + "/200fx200'><div class 'floatvalue'>Float: 0.11503319442272186<div class='bitskinscomp' style='font-weight: normal;font-size:12px'>" + message + "</div><div class='buyer-price center-align'>$" + numberWithCommas(item.price) + "</li></div></div>");
      }
    }
  });
}

$(document).ready(function() {
  var win = $(window);
  var page = 0;
  renderItems(paginate(items, page));

  // Each time the user scrolls
  win.scroll(function() {
    // End of the document reached?
    if ($(document).height() - win.height() == win.scrollTop()) {
      page++;
      renderItems(paginate(items, page));
    }
  });
});

O usando jQuery endlessScroll plugin

$(document).ready(function() {
  $(window).endlessScroll({
    inflowPixels: 300,
    callback: function() {
      //append new items to your list
    }
  });
});
0
Dmitriy Nevzorov 8 may. 2016 a las 09:54

¿Qué tal escribir una pequeña función que verifica la posición de desplazamiento y dispara una llamada ajax para obtener más datos o simplemente obtener el siguiente espacio de datos de su objeto json y vincularlo a HTML? algo como a continuación:

$(window).scroll(function() {
    if($(window).scrollTop() == $(document).height() - $(window).height()) {
           // ajax call or some other logic to show data here
    }
});

O puede usar uno de los tantos complementos, estoy usando Waypoint para una de las mismas cosas.

1
open and free 7 may. 2016 a las 12:12

Intente usar variables adicionales como la página actual (si tiene 1000 elementos y muestra 50 en cada uno, entonces tendrá un máximo de 20 páginas para mostrar), número de elementos en una página, índice inicial e índice final.

Asumir:

var currPage = 0; //(First page)

var itemsInPage = 50; //NUMBER OF ITEMS IN A PAGE

Luego, para cada desplazamiento, calcule el índice startItem y el índice endItem.

startItem = currPage * itemsInPage;//FOR FIRST PAGE, THIS IS 0

endItem = startItem + itemsInPage; //AND THIS IS 50

En el bucle forEach, marque if( index >= startItem && index < endItem ) y muestre solo esos elementos.

Deberá incrementar el currPage después de cada desplazamiento y al comienzo del bucle forEach, agregue:

if( currPage > Math.ceil( items.length/itemsInPage ) ) currPage = 1;

(Redondear usando ceil porque si la longitud de 'items' no es perfectamente divisible por 'itemsinpage', entonces se suman como una página adicional)

0
Maddy PZ 7 may. 2016 a las 12:46

Si puede utilizar un tercero, eche un vistazo aquí Infinite ajax scroll.

O como se explica en pregunta similar use Complemento JQuery Waypoint

-1
Community 23 may. 2017 a las 12:25