/FD-Step4

Primary LanguageTypeScript

FD-Step4

Отзывчивый JQuery-слайдер имеющий следующую функциональность:

  1. Позволяет устанавливать рамер шага

  2. Позволяет устанавливать максимальное и минимальное значение

  3. Поддерживает два режима: промежуток и одно значение

  4. Поддерживает два вида: горизонтальный и вертикальный

  5. Позволяет отключать и включать элемент над бегунком, который показывает значение

  6. Предоставляет возможность изменять значение кликом на значение шкалы или на дорожку слайдера

  7. Создает шкалу, кол-во делений в которой зависит от размера шкалы

Инициализация проекта

  1. Установка зависимостей: npm install.

  2. Сборка проекта: npm run build.

  3. Запуск проекта на локальном сервере: npm run dev.

  4. Развертывание проекта на gh-pages: npm run deploy.

  5. Прогон тестов и отображение покрытия кода тестами: test:coverage.

Подключение слайдера к странице

Для подключения слайдера к странице необходимо подключить JQuery и подключить к странице файлы slider.js и slider.css, который лежат в папке public.

Создание слайдера

$('#my-slider').slider(options);

Options:

  • isRange

    Определяет режим работы слайдера: промежуток или одно значение
    тип: boolean
    по умолчанию: false
  • isTipsExists

    Если true, то подсказки с значениями включены
    тип: boolean
    по умолчанию: false
  • maxValue

    Минимальное значение слайдера
    тип: number
    по умолчанию: 100
  • minValue

    Максимальное значение слайдера
    тип: number
    по умолчанию: 0
  • orientation

    Определяет вид слайдера. Может принимать два значения: 'horizontal'(горизонтальный) и 'vertical'(вертикальный)
    тип: string
    по умолчанию: 'horizontal'
  • highValue

    Значение большего бегунка
    тип: number
    по умолчанию: 100
  • lowValue

    Значение меньшего бегунка( или единственного, если isRange: false)
    тип: number
    по умолчанию: 0
  • step

    Шаг слайдера
    тип: number
    по умолчанию: 1

В случае передачи невалидных параметров, будут использоваться параметры по умолчанию.

Использованные библиотеки и плагины:

Использованные технологии:

  1. TypeScript

  2. Jest

  3. ESLint

  4. Webpack

  5. Pug

  6. SCSS

API Слайдера

Также Слайдер имеет API для изменения и получения значений на лету

Получение значений:

Имя Возвращаемое значение Описание

isRange

boolean

Если возвращаемое значение true, то слайдер в режиме промежутка, если false - то в режиме одного значение

getMinValue

number

Возвращает минимальное значение слайдера

getMaxValue

number

Возвращает максимальное значение слайдера

getHighValue

number

Возвращает значение большего бегунка

getLowValue

number

Возвращает значение меньшего бегунка(или единственного, если isRange: false)

getStep

number

Возвращает шаг слайдера

getOrientation

string

Возвращает вид слайдера(горизонтальный или вертикальный)

getTipsExistStatus

boolean

Если возвращаемое значение true, то подсказки включены

Изменение значений:

Имя Принимаемые аргументы Возвращаемое значение Описание

setRangeMode

isRange: boolean

Если принимаемое значение true, то переводит слайдер в режим промежутка, если false - то в режим одного значение

setMinValue

minValue: number

Изменяет минимальное значение слайдера

setMaxValue

maxValue: number

boolean

Изменяет максимальное значение слайдера. Возвращает true, если изменение прошло успешно

setHighValue

highValue: number

boolean

Изменяет значение большего бегунка. Возвращает true, если изменение прошло успешно

setLowValue

lowValue: number

Изменяет значение меньшего бегунка(или единственного, если isRange: false)

setStep

step: number

number

Изменяет шаг слайдера. Возвращает true, если изменение прошло успешно

setOrientation

orientation: string

Изменяет вид слайдера(горизонтальный или вертикальный). Принимает только 'horizontal' и 'vertical'

hideTips

Отключает подсказки

showTips

Включает подсказки

Событие

При изменении значений настроек слайдера, генерируется событие 'slider-change' на корневом DOM-элементе слайдера.

Архитектура

Модель

Хранит бизнес-данные слайдера: значения, граничные значения, шаг и режим слайдера(промежуток или одиночное значение). Является одновременно и фасадом(т.е. предоставляет методы для чтения и изменения данных и валидирует приходящие данные) и издателем(т.е. оповещает подписчиков об изменениях). Не имеет зависимостей с другими модулями.

Вид

Является графическим отображением Модели и через него пользователь может изменять Модель. Вид имеет главный класс View, который является одновременно и фасадом для всего Вида и издателем(оповещает подписчиков об определенных действиях пользователя). Сам по себе View являет оберткой корневого DOM-элемента слайдера. Также есть классы Range, Strip, Tip, Scale, ScaleSubElement и Runner. Все эти классы являются частями слайдера, т.е. обертками DOM-элементов слайдера и предоставляют методы для работы с ними. Также все они являются наследниками абстрактного класса ViewComponent.

Общение между компонентами Вида происходит следующим образом. View создает нужные экземпляры классов и имеет ссылки на них, но сами экземпляры, т.е. остальные компоненты Вида не знают и View. При действиях пользователя на DOM-элементе компонента(Runner, Stripe, Scale) генерируется кастомное событие, которое хранит нужные данные, а View уже посредством всплытия этих событий их отлавливает и обрабатывает. Обработка в свою очередь подразумевает оповещение подписчиков о произошедшем событии.

Для поддержки горизонтального и вертикального вида имеется класс OrientationBehavior. Он хранит методы, которые используют компоненты для изменения позиций своих DOM-элементов нужным образом. Он хранит приватное свойство Orientation, по которому он и выбирает каким образом изменять позиции элементов: вертикально или горизонтально. Компоненты хранят экземпляр OrientationBehavior. При создании слайдера, Вью создает экземпляр OrientationBehavior c нужной ориентацией и передает этот экземпляр остальным подэлементам Вью. В случае изменения ориентации слайдера Вью изменяет свойство Orientation этого объекта через сеттер.

Вид не знает ни о Контроллере, ни о Модели.

Контроллер

Контроллер хранит ссылки на Модель и Вид и является подписчиком Вида и Модели. Он получает оповещения об изменении Модели и изменяет Вид. Также он получает оповещения о действиях пользователя, после изменяет Модель и тем самым валидирует полученные от Вида данные и уже с помощью метода фасада Вида update передает обновленные данные из Модели во Вью.

Класс Controller является основным классом Контроллера и обрабатывает оповещения от Модели и Вида.

UML-диаграма

UML-diagram