недавнийPC
В этом требовании есть небольшой нюанс.Внизу страницы есть область списка.Объем данных в этом списке относительно велик, и требуется управление пейджингом.При переключении номеров страниц отправлятьajax
Запрос, в случае отсутствия обновления страницы, реализует обновление данных списка, поэтому он включает в себя функцию разбиения на страницы. слишком сложны в использовании Либо немного сложно начать, поэтому я подумал, что это не должно быть слишком сложно, я могу написать это сам.
Этот тип пейджинговой функции обычно очень распространен, но очень немногие нуждаются в том, чтобы сделать это самостоятельно, поэтому я остаюсь на том уровне, на котором я знаю, что это должно иметь место, но на самом деле я никогда не исследовал его. что это должно включать в себя некоторые логические суждения не должно быть трудно осознать.Однако, когда вы действительно начнете это осознавать, вы узнаете, что значит быть красивым.
основное введение
Сначала о рендерах:
чем-то похож наGithub
В нижней части страницы результатов поиска есть несколько страниц, некоторые логики могут немного отличаться, но в целом они должны быть схожими.
использование кодаES6
синтаксис, этот плагин на самом делеclass
,babel
Совместимость с упаковкойIE9
, нативный js не имеет зависимостей.
Весь код класса плагинаSimplePagination
Добавить пустой комментарий строки или что-то200
Строки или около того, но часть кода является вспомогательным кодом, таким как инициализация, селекторы, добавление и удаление классов и т. д., а затем удаление комментариев пустой строки, последний оставшийся основной код будет меньше100
Линия похожа.
Основная логика сужденияgotoPage
В этом методе, поскольку необходимо рассматривать различные ситуации, в нем записывается много информации.if.. else...
Суждение, прежде чем писать эти коды, я думаю, что это почти то же самое, что и несколько суждений в лучшем случае, но я не ожидал, что их будет так много.Каждый переключатель номера страницы соответствует другой ветке суждения, что более громоздко.
Краткий анализ основного кода
Основным методом являетсяgotoPage
, на первый взгляд, в этом методе полноif...else..
Судя по всему запустить невозможно, но как бы ни менялся номер страницы, и как бы вы ни переключались на определенный номер страницы, вам нужно помнить только одно, то есть при переходе на определенный номер страницы состояние всего компонента пейджинга, соответствующего этому номеру страницы,КонечноДа, этот момент очень важен, пока этот момент понят, эта серияif...else...
Смысл суда на самом деле ясен.
Самый внешний из этого методаif...else...
Решение основано на том, должен ли номер страницы отображать заполнитель с многоточием.Если общее количество номеров страниц меньше, чем количество страниц, одновременно существующих в классе, то заполнитель с многоточием не нужен, который представляет собой относительно простую разбивку на страницы, например следующую:
В этом случае вам нужно только изменить номер страницы при переключенииactive
номер страницы.
Что касается другой ситуации, требующей, чтобы многоточие заняло место, то это сложное место, и в этой ветви самый внешний слой имеет3
суждение, это3
Это решение включает все случаи переключения номеров страниц.
Первое суждение относится к случаю, когда заполнитель с многоточием не должен появляться в левой части компонента подкачки, например:
Второе решение для случая, когда заполнитель ELLIPSIS не должен появляться в правой части компонента пейджинга, такого как следующее:
Третье суждение относится к случаю, когда заполнители с многоточием должны появляться с обеих сторон компонента подкачки, например:
Все состояния всего компонента пейджинга должны быть включены в эти три состояния, поэтому следующее логическое суждение должно быть сосредоточено только на этих трех состояниях.
Применение
первыйnew
этот класс, а затем вызовитеinit
можно передать соответствующие параметры, например:
const slp = new SimplePagination(12)
slp.init({
container: '.box',
maxShowBtnCount: 3,
onPageChange: state => {console.log('pagination change:', state.pageNumber)}
})
Среди них, вnew
создавать экземплярSimplePagination
класс, вам нужно пройти в1
параметры, общее количество страниц (totalPageCount
), плагин пейджинга должен отрисовывать элемент номера страницы в соответствии с этим значением.
передачаinit
При вызове метода для удобства передачи параметров этот метод получает объект, а в объекте существуют следующие свойства:
имя параметра | Типы | default |
иллюстрировать | Требуется ли |
---|---|---|---|---|
container |
string |
body |
ОдинDOM селектор элементов,id илиclass Может использоваться для представления контейнера для подкачки |
нет |
maxShowBtnCount |
number |
5 |
За исключением двух фиксированных кнопок в начале и в конце, посередине отображается не более нескольких кнопок с номерами страниц. | нет |
pCName |
string |
page-li |
Единое имя класса для всех элементов номера страницы разбиения на страницы, включая предыдущую страницу и следующую страницу. | нет |
activeCName |
string |
page-active |
Имя класса добавляется при выборе номера страницыclass
|
нет |
dataNumberAttr |
string |
Атрибут элемента page-number, значением которого является номер страницы, представленный элементом page-number. | data-number |
нет |
prevCName |
string |
page-prev |
Предыдущее имя класса кнопкиclass
|
нет |
nextCName |
string |
page-next |
Имя класса следующей кнопкиclass
|
нет |
disbalePrevCName |
string |
no-prev |
Имя класса для добавления к предыдущей кнопке, когда ее доступность отключена.class
|
нет |
disbaleNextCName |
string |
no-next |
Имя класса для добавления к следующей кнопке, когда ее доступность отключена.class
|
нет |
pageNumberCName |
string |
page-number |
Все элементы нумерации страниц, кроме кнопок предыдущей страницы, следующей страницы и многоточия-заполнителя, не включены. Единое имя класса | нет |
swEvent |
string |
click |
Инициировать событие для переключения страниц | нет |
onPageChange |
string |
- | Функция обратного вызова при переключении номера страницы | нет |
В дополнение к переключению номера страницы в соответствии с номером страницы на странице и кнопками предыдущей страницы и следующей страницы, плагин также имеетgotoPage
метод доступен, этот метод получает типnumber
параметр, вызов этого метода приведет к переходу на номер страницы, указанный в этом параметре, например, переход на номер страницы9
начальство:
slp.gotoPage(9)
Если переданный параметр не является допустимым номером страницы, ничего не будет сделано.
Исполняемый пример кода для этой статьи был помещен вGithubГотово, если интересно, можете посмотреть~
SimplePagination
Этот класс в основном заключается в логическом суждении о переключении номеров страниц, а также простой сборкеDOM
Структура, я написал случайный стиль в примере кода, если вам не нравится этот стиль, вы можете полностью переписать его самостоятельно.