Можно ли реализовать lazy load для таблицы без jQuery?

336
15 декабря 2017, 04:53

Столкнулась с задачей реализовать lazy load для таблицы без помощи jQuery. Гугл не помог, примеров более-менее адекватных и подходящий по тематике не нашла. Может кто-то еще сталкивался с такой задачей? Буду рада помощи.

Здесь получаю список статей с сервера и распарсиваю json-ответ в табличку:

 ArticleController.prototype.getAllArticles = function(){
    var xhr = new XMLHttpRequest();
    xhr.open('GET', '/api/posts', true);
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa("admin" + ":" + "admin"));
    xhr.onreadystatechange = function(){
          if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
            var items = JSON.parse(xhr.responseText);
            var output = '';
            for (var key in items){
                output += '<tr>';
                output += '<td>' + items[key].id + '</td>';
                output += '<td>' + items[key].title + '</td>';
                output += '<td>' + items[key].content + '</td>';
                output += '<td>' + items[key].author + '</td>';
                output += '<td>' + items[key].creation_date + '</td>';
                output += '<td>'+
                '<a href="#"><i class="material-icons">edit</i></a>' +
                '<a href="#" class="col-lg-1"><i class="material-icons">delete</i></a>' +
                '</td>';
                output += '</tr>'
            }
            document.getElementById('articles').innerHTML = output;
        };
    };
    xhr.send();
}
function ArticleController() {
    this.indexAction = function() {
    this.getAllArticles();
    };
};
    var articles = new ArticleController();
    articles.indexAction();

Вот так выглядит табличка:

Answer 1

Можно. Для этого нужно решить несколько задач.

  1. Определение прокрутки страницы в самый низ;
  2. Создание на сервере специального метода, который будет возвращать дополнительные строки;
  3. Выполнение с клиента асинхронного запроса на догрузку таблицы по событию из п.1;
  4. Отрисовка полученных от сервера данных на странице.

1. Определение прокрутки страницы в самый низ (когда нужно будет подгрузка)

Для того что бы определить, что страница была промотана в самый низ, нужно взять разницу между двумя величинами: высота всей страницы в пикселях и смещение экрана (или viewport) относительно начала страницы + высота этого самого экрана. Чем меньше разница, тем ниже прокручена страница и тем скорее нужно начать загружать дополнительные строки.

2. Создание на сервере специального метода, который будет возвращать дополнительные строки

Серверный метод должен принимать от клиента информацию о том, сколько строк уже было загружено или с какой строки нужно начать. Обычно это делается так:

/feed.php?offset=20&limit=20

Что означает: верни мне 20 строк начиная с 20ой. Что сервер и должен сделать в виде JSON или уже в отрисованном виде. Зависит от реализации приложения.

3. Выполнение с клиента асинхронного запроса на догрузку таблицы по событию из п.1

У вас эта задача уже решена за исключением отправки сведений о требуемом клиентом количестве строк и смещении.

4. Отрисовка полученных от сервера данных на странице

У вас это так же реализовано.

READ ALSO
Как сделать табы с помощью data и id

Как сделать табы с помощью data и id

Всем приветПомогите пожалуйста сделать табы

406
Webpack. Два разных loaders&#39;а для svg

Webpack. Два разных loaders'а для svg

Ситуация такая: для вставки svg изображений в код используется react-svg-loaderПоявилась задача использовать svg в стилях css, для этого необходимо обрабатывать...

271
Возникают предупреждения в связки postcss + cssnext + webpack

Возникают предупреждения в связки postcss + cssnext + webpack

Использую postcss + cssnext + webpack и при использовании нативный css propertys в консоли возникает предупреждение -

351