Сначала window.innerWidth
следует использовать для вычисления itemsPerPage
.
Вы уже создали функцию detect(width)
для ее вычисления.
Однако была проблема, что переменная count
объявлена внутри функции detect
и не видна (и не может использоваться) снаружи. Самый простой способ использовать результат функции detect
— добавить оператор return
.
const detect = function (width) {
let count;
if (width < 576) {
count = 6;
} else if (width >= 576 && width < 768) {
count = 8;
} else if (width >= 768 && width < 992) {
count = 12;
} else if (width >= 992) {
count = 16;
}
return count;
}
Теперь мы можем вызывать detect(window.innerWidth)
при инициализации компонента разбиения на страницы, чтобы получить соответствующий itemsPerPage
.
Давайте переместим настройку нумерации страниц в отдельную функцию для повторного использования.
function setupPagination() {
$("#content")
.flexiblePagination({
itemsPerPage: detect(window.innerWidth), // calculate using detect()
displayedPages: 4,
itemSelector: "div.result:visible",
pagingControlsContainer: "#pagingControls",
showingInfoSelector: "#showingInfo",
searchBox: { onClick: !0, onClickSelector: "#search" },
})
.getController().onPageClick = function (s, n) {
console.log("You Clicked Page: " + s);
};
}
Функция setupPagination
должна вызываться во время начальной загрузки и при изменении размера окна для обновления настроек.
Что-то вроде этого:
$(document).ready(function() {
setupPagination();
$(window).resize(function () {
setupPagination();
});
});
Однако при тестировании я обнаружил, что плагин разбиения на страницы удаляет некоторые элементы из content
div при вызове. Это довольно неприятно, но мы можем иметь резервную копию content
div HTML ($('#content').html()
) и восстанавливать ее, когда размер окна изменяется и нам нужно снова вызывать плагин пагинации.
$(document).ready(function() {
const backup = $('#content').html(); // plugin kills content, keep backup
setupPagination();
$(window).resize(function () {
$('#content').html(backup); // restore content
setupPagination();
});
});
См. рабочий пример ниже:
const detect = function (width) {
let count;
if (width < 576) {
count = 6;
} else if (width >= 576 && width < 768) {
count = 8;
} else if (width >= 768 && width < 992) {
count = 12;
} else if (width >= 992) {
count = 16;
}
return count;
}
function setupPagination() {
$("#content")
.flexiblePagination({
itemsPerPage: detect(window.innerWidth), // calculate
displayedPages: 4,
itemSelector: "div.result:visible",
pagingControlsContainer: "#pagingControls",
showingInfoSelector: "#showingInfo",
searchBox: { onClick: !0, onClickSelector: "#search" },
})
.getController().onPageClick = function (s, n) {
console.log("You Clicked Page: " + s);
};
}
$(document).ready(function() {
const backup = $('#content').html(); // plugin kills content, keep backup
setupPagination();
$(window).resize(function () {
$('#content').html(backup); // restore content
setupPagination();
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<script src="https://www.jqueryscript.net/demo/content-paginator-flexiblepaginationjs/Flexible.Pagination.js"></script>
<input type="text" id="search">
<div id="content">
<div>
<div class="result">Item 1</div>
<div class="result">Item 2</div>
<div class="result">Item 3</div>
<div class="result">Item 4</div>
<div class="result">Item 5</div>
<div class="result">Item 6</div>
<div class="result">Item 7</div>
<div class="result">Item 8</div>
<div class="result">Item 9</div>
<div class="result">Item 10</div>
<div class="result">Item 11</div>
<div class="result">Item 12</div>
<div class="result">Item 13</div>
<div class="result">Item 14</div>
<div class="result">Item 15</div>
<div class="result">Item 16</div>
<div class="result">Item 17</div>
<div class="result">Item 18</div>
<div class="result">Item 19</div>
<div class="result">Item 20</div>
<div class="result">Item 21</div>
<div class="result">Item 22</div>
<div class="result">Item 23</div>
<div class="result">Item 24</div>
</div>
</div>
<div id="pagingControls"></div>
<div id="showingInfo"><div>
Кто угодно......???
Самый простой вариант - вычислить
itemsPerPage
на основе размера окна (ширина или высота, укажите, что нужно). Однако это не будет обновляться динамически и потребует перезагрузки страницы при изменении размера окна. Пример:itemsPerPage: window.innerWidth < 1024 ? (window.innerWidth < 768 ? 6 : 8) : 12
Можно ли это сделать, не обновляя страницу?