Как реализовать подобный Pagination js

238
10 декабря 2016, 10:30

Нужна простейшая пагинация, которая примерно работает так:

Всего на странице (допустим) 48 элементов, каждые 16 элементов это 1 страница, тоесть , тоесть все остальные 32 элемента должны быть display:none. Ну и переключатели среди страниц. При переходу на вторую страницу - первые 16 элементов скрываются, и показываются следующие 16 и тд.

Облазил весь интернет, нужную библиотеку не нашел, как реализовать не знаю.

Answer 1

Велосипед - не знаю, но можно попробовать так.

var count = 10; //всего записей 
var cnt = 5; //сколько отображаем сначала 
var cnt_page = Math.ceil(count / cnt); //кол-во страниц 
 
//выводим список страниц 
var paginator = document.querySelector(".paginator"); 
var page = ""; 
for (var i = 0; i < cnt_page; i++) { 
  page += "<span data-page=" + i * cnt + "  id=\"page" + (i + 1) + "\">" + (i + 1) + "</span>"; 
} 
paginator.innerHTML = page; 
 
//выводим первые записи {cnt} 
var div_num = document.querySelectorAll(".num"); 
for (var i = 0; i < div_num.length; i++) { 
  if (i < cnt) { 
    div_num[i].style.display = "block"; 
  } 
} 
 
var main_page = document.getElementById("page1"); 
main_page.classList.add("paginator_active"); 
 
//листаем 
function pagination(event) { 
  var e = event || window.event; 
  var target = e.target; 
  var id = target.id; 
   
  if (target.tagName.toLowerCase() != "span") return; 
   
  var num_ = id.substr(4); 
  var data_page = +target.dataset.page; 
  main_page.classList.remove("paginator_active"); 
  main_page = document.getElementById(id); 
  main_page.classList.add("paginator_active"); 
 
  var j = 0; 
  for (var i = 0; i < div_num.length; i++) { 
    var data_num = div_num[i].dataset.num; 
    if (data_num <= data_page || data_num >= data_page) 
      div_num[i].style.display = "none"; 
 
  } 
  for (var i = data_page; i < div_num.length; i++) { 
    if (j >= cnt) break; 
    div_num[i].style.display = "block"; 
    j++; 
  } 
}
.num { 
  display: none; 
} 
.paginator { 
  line-height: 150%; 
} 
.paginator > span { 
  display: inline-block; 
  margin-right: 10px; 
  cursor: pointer; 
} 
.paginator_active { 
  color: red; 
}
Блоки: 
<div class="page"> 
  <div data-num=1 class="num">1</div> 
  <div data-num=2 class="num">2</div> 
  <div data-num=3 class="num">3</div> 
  <div data-num=4 class="num">4</div> 
  <div data-num=5 class="num">5</div> 
  <div data-num=6 class="num">6</div> 
  <div data-num=7 class="num">7</div> 
  <div data-num=8 class="num">8</div> 
  <div data-num=9 class="num">9</div> 
  <div data-num=10 class="num">10</div> 
</div> 
Страницы: 
<div class="paginator" onclick="pagination(event)"></div>

READ ALSO
Как &ldquo;научить&rdquo; HTML брать контент из JSON файла?

Как “научить” HTML брать контент из JSON файла?

Мне нужно чтобы HTML сайта использовал mustache или handlebars чтобы заполнить себя контентом из JSON файла

351
IE11 input type=&ldquo;file&rdquo; accept=&ldquo;&rdquo; всегда добавляются HTML и Images

IE11 input type=“file” accept=“” всегда добавляются HTML и Images

В IE11, какой бы тип файла не был выбран в accept, всегда добавляются две дополнительные категории: "Html" и "Images"Например, если требуется кастомный...

184
mailto не работает для большого количества адресатов

mailto не работает для большого количества адресатов

Добрый день! Есть необходимость создавать письмо с помощью mailtoС помощью js создаю следующее:

162