Проект является имплементацией слайдера по программе обучения MetaLamp.
TypeScript, JQuery
SCSS - препроцессор CSS,
Jest - для тестов,
Webpack - для сборки.
Страница с демонстрацией на
gh-pages
git clone https://github.com/Liquense/FSD-task-4
npm install
Сборка: npm run build
Сборка с дев-сервером: npm run dev-server
(страница на http://localhost:8080/demo-page.html)
Приложение покрыто тестами: npm run test
Проверка линтером: npm run eslint
Импортировать JQuery и liquidSlider.ts.
Инициализировать плагин с помощью функции .liquidSlider()
у JQuery-объекта - он будет заменён слайдером.
Несколько примеров:
const sliderInitSelector = 'your selector'; // ваш селектор
$(sliderInitSelector).liquidSlider();
Вертикальный слайдер с пользовательскими минимумом, максимумом и шагом
$(sliderInitSelector).liquidSlider({
min: -50,
max: 20,
step: 2,
isVertical: true,
});
Слайдер с передачей пользовательских данных, двумя стандартными ползунками,
отображаемой разметкой
$(sliderInitSelector).liquidSlider({
items: [
1,
{ toString(): string { return 'two'; } },
"<img src='https://img.icons8.com/cotton/2x/like--v1.png' alt='heart'>",
'last',
],
isRange: true,
withMarkup: true,
});
Слайдер с передачей собственных ползунков
(количество, положение, с кем связаны)
и отображением подсказки только на активном ползунке
$(sliderInitSelector).liquidSlider({
handlers: [
{ rangePair: 'start' },
{ itemIndex: 2, rangePair: 0 },
{ itemIndex: 3, rangePair: 3 },
{ itemIndex: 6 },
],
showTooltips: false,
});
items: presentable[]
массив элементов, который будет перебираться слайдером
(экземпляры типа presentable должны иметь метод .toString()
)
(если не указан - будет массив чисел от min до max с шагом step)
(если указан, перемещение ползунков будет происходить по индексам массива с данными)
values: number[]
- текущие значения стандартных ползунков
(применимо, если не были переданы свои ползунки)
(если заданы пользовательские значения, то текущее значение - номер элемента в массиве)
isRange: boolean
- диапазон ли это
(false - один ползунок, true - диапазон из двух ползунков)
если определены пользовательские ползунки - они в приоритете
isReversed: boolean
- инвертированы ли диапазоны
isVertical: boolean
- ориентация
(true - вертикальная, false - горизонтальная)
min: number
- минимальное значение слайдера
(если задан пользовательский массив значений, это минимальный индекс)
max: number
- максимальное значение слайдер
(если задан пользовательский массив значений, это максимальный индекс)
step: number
- шаг слайдера
(при использовании массива пользовательских элементов будет относиться к индексам элементов массива)
handlers: object[]
- параметры для массива ползунков
(Индексы ползунков назначаются в том же порядке, в котором они переданы, начиная с 0)
itemIndex: number
- значение ползунка
(индекс при пользовательских значениях)rangePair: number|'start'|'end'
объект, с которым нужно связать ползунок
'start'
- с началом слайдера
'end'
- с концом слайдера
<number>
- с другим ползунком по его индексуadditionalClasses: string
- пользовательские классыtooltip: object
- подсказка, которая будет отображаться возле ползункаadditionalClass: string[]
пользовательские классы подсказки
addView(newView)
- связывает переданный экземпляр Вида с моделью
(передаваемый Вид должен имплементировать интерфейсы View и Listenable)
addHandler(itemIndex: number, rangePair: number|'start'|'end')
- добавляет новый ползунок
itemIndex
- значение ползунка (если в слайдер передан массив пользовательских значений - индекс значения)rangePair
- пара для ползунка (start - начало слайдера, end - конец слайдера, - индекс ползунка, с которым нужно связать добавляемый)
removeHandler(handlerIndex: number)
- удаляет ползунок
handlerIndex
- индекс ползунка, который нужно удалить
setMin(newMin: number)
- устанавливает минимальное значение слайдера
newMin
- новое минимальное значение слайдера (если передан массив пользовательских значений, это индекс нужного значения)
setMax(newMax: number)
- устанавливает максимальное значение слайдера
newMax
- новое максимальное значение слайдера (если передан массив пользовательских значений, это индекс нужного значения)
setStep(newStep: number)
- устанавливает шаг слайдера
newStep
- новый шаг слайдера (если передан массив пользовательских значений, это количество пропускаемых индексов)
setTooltipsVisibility(newState:boolean)
- устанавливает видимость подсказок у ползунков
(true - сделать видимыми, false - скрыть)
setMarkupVisibility(newState: boolean)
- устанавливает видимость разметки слайдера
(true - сделать видимой, false - скрыть)
setVertical(newState: boolean)
- устанавливает ориентацию слайдера
(true - вертикальный, false - горизонтальный)
Расширяет JQuery функцией, позволяющей инициализировать слайдеры на JQuery-объектах.
Функция, в свою очередь, создаёт Контроллер и передаёт ему параметры инициализации слайдера.
Возвращает экземпляр контроллера.
Инициализирует Модель и базовый Вид, осуществляет их координацию
и передачу данных между ними.
Экземпляр контроллера выступает объектом взаимодействия с пользователем.
Отслеживает изменения положения ползунка в defaultView (handlerPositionChanged()
)
и значения в sliderModel (handlerValueChanged()
)
с помощью паттерна наблюдателя.
Здесь хранятся данные слайдера и производятся все вычисления, связанные с ними в целом;
Вызываются инициализации модельной части ползунков и изменения данных в них;
Хранит данные о ползунке и производит вычисления его относительного положения и
уведомляет создавшую его sliderModel об изменениях посчитанных значений
вызовом handlerValueChanged()
в ней.
Положения ползунков высчитываются в нормализованных относительных величинах (от 0 до 1),
чтобы эти значения были понятны и модели, и виду.
модуль sliderView.
Хранит информацию о слайдере, относящуюся к визуальному отображению;
Добавляет обработчики событий;
Создаёт тело слайдера, инициирует создание внутренних элементов;
Обновляет визуальное отображение слайдера при изменениях.
Создаёт элементы, хранит информацию, рассчитывает и обновляет позицию у ползунка.
Создаёт элементы, хранит информацию, меняет состояние у подсказки ползунка.
Хранит элементы, включенные в диапазон, обновляет позицию диапазона.
Создаёт элементы разметки, рассчитывает и обновляет их позиции.
Содержит общие для проекта функции.
Файлы на разных уровнях проекта, содержат имплементируемые интерфейсы и типы.