Поочередный вывод данных через цикл JS

Поочередный вывод данных через цикл JS


Нужно сделать поочередный вывод значений объекта через цикл. Делать это надо по клику на кнопку. По сути, задача сделать кнопки "Еще/показать далее" , которая загружает контент определенного количества

<body>
  <span id="span">Показать еще (загружать по 2 value)</span>

    <script>
    
    // есть объект и данными
    let data = { arr:[prop1='value1',prop2='value2', prop3='value3', prop4='value4', prop5='value5', prop6='value6']};
 
 
    for(let i=0;i<Object.keys(data.arr).length;i++) {
        
        let li;
        
        if(i<2) { // не более двух тегов с данными на странице
        li = document.createElement('LI');
        li.innerHTML = data.arr[i];
        document.body.append(li);
        }
        
          document.getElementById('span').addEventListener('click', function() { 
          
          if(i>2) { // при клике создаются ещё теги
        li = document.createElement('LI');
        li.innerHTML = data.arr[i];
        document.body.append(li)  
              
          }
          
         // нужно чтобы при клике выскакивало по 2 тега, а не все сразу.
          
          
          });
        
    }
 

 </script>
 


</body>

То есть, в цикле идет перебор ключей из БД. И на его основе создаются li-шки. Их просто надо создавать при клике, не более (например) 2 штук за клик.




Перебираем массив, увеличивая индекс. Выводим в цикле необходимое количество пунктов, начиная с текущего индекса. Если пункты закончились, то делаем кнопку недоступной.

const obj = [{"datetime":"2024-06-20 11:35:33","author":"Eloise","title":"Norfolk Island","text":"Aute duis ipsum voluptate exercitation aliquip ad cupidatat commodo consectetur laboris in tempor. Minim culpa ullamco enim ullamco deserunt nulla elit adipisicing excepteur ex nulla incididunt et ullamco."},{"datetime":"2024-06-01 12:53:29","author":"Minnie","title":"Lesotho","text":"Duis commodo velit Lorem nostrud eiusmod reprehenderit culpa ad aliqua et sunt. Duis ipsum eiusmod non anim elit dolore in."},{"datetime":"2024-01-13 03:40:11","author":"Myrna","title":"Azerbaijan","text":"Nulla ex ex occaecat in ea elit est minim consequat elit ullamco. Id aliquip anim anim quis Lorem cillum quis ad anim enim officia voluptate sunt nisi."},{"datetime":"2024-06-19 04:31:49","author":"Tillman","title":"Bhutan","text":"Cupidatat ut laborum sunt reprehenderit ut nostrud. Nostrud velit fugiat incididunt occaecat occaecat."},{"datetime":"2024-01-27 12:50:16","author":"Bird","title":"Malawi","text":"Ullamco eiusmod velit sit dolore mollit commodo irure deserunt ut cillum cupidatat cupidatat. Occaecat dolore duis dolore magna ea sunt cupidatat adipisicing."},{"datetime":"2024-05-30 08:04:24","author":"Ella","title":"Algeria","text":"Nostrud minim et tempor culpa aliquip commodo do elit mollit sunt culpa commodo incididunt. Proident non irure dolore exercitation anim non id tempor consectetur."},{"datetime":"2024-01-28 11:09:00","author":"Allie","title":"Iran","text":"Eiusmod qui in ex ad labore. Eu magna est magna elit labore eiusmod eu in non sit."}];

let count = 0, step = 2; // step - количество подгружаемых пунктов

function fMore(s) {
  for (let i = 0; i < s; i++) {
    let curr = obj[count++];
    if (curr)
      news.insertAdjacentHTML('beforeend', `<li><strong>${curr.title}</strong><p>${curr.text}</p><small>${curr.datetime}</small> <em>${curr.author}</em></li>`);
    else {
      more.disabled = true; more.textContent = 'Вы просмотрели все записи';
    }
  }
}

more.addEventListener('click', fMore.bind(null, step));
fMore(1); // 1 - начальное количество видимых пунктов
#news { font-size: .75rem; background-color: #fc08; } #news li { margin: .25rem 0; padding: .5em; background-color: #fc08; } #news p { margin: .25rem 0; }
<ul id="news"></ul><button id="more">Ещё...</button>





Report Page