Giter VIP home page Giter VIP logo

o-slider's Introduction

oSlider

Это ещё один обыкновенный слайдер.
Опробовать слайдер в действии можно открыв превью.

Внимание: Данный пакет является учебным проектом для студентов компании Metalamp, не стоит его использовать в реальных проектах.

Note: This package is a training project for students of the company Metalamp, do not use it in real projects.

🏷️ Содержание

✒️ Требования

Для работы слайдера необходима библиотека jQuery версии ^3.1.0.

Библиотека jQuery должна быть загружена на страницу раньше слайдера.

💾 Установка

Инструкции данного раздела следует выполнять в командной строке.

С помощью npm

npm install o-slider

С помощью yarn

yarn add o-slider

💊 Использование

Подключение

ES2015+
import 'o-slider';

CommonJS

require('o-slider');

Инициализация

Настройки по умолчанию

$(() => {
  $(selector).oSlider();
})

Код инициализации слайдера должен запускаться после того как страница будет загружена. В примере выше это обеспечивает jQuery обёртка, далее в примерах она будет отброшена для лучшей читаемости кода.

Передача настроек с помощью объекта настроек

$(selector).oSlider({
  from: 50,
});

Тоже самое что и выше только с помощью data-* атрибутов

<div class = "o-slider" data-from = "50"></div>

<script>
  $('.o-slider').oSlider();
</script>

Передача настроек через data-* атрибуты возможна и после инициализации слайдера.

Настройки указанные в data-* атрибутах имеют приоритет над переданными в объект настроек.

⚙️ Конфигурации

Настройки

Параметр Тип По умолчанию Описание
min number 0 минимальное значение
max number 100 максимальное значение
step number 1 размера шага
from number 0 позиция ползунка, если range: true то нижняя граница интервала
to number null верхняя граница интервала, этот параметр не имеет смысла если range: false
tip boolean false добавить подсказку
bar boolean false добавить бар
scale boolean false добавить шкалу
range boolean false создать интервал
vertical boolean false сменить направление слайдера на вертикальное

Методы

oSlider('settings', [options])

Вызов без options возвращает объект настроек слайдера.

const sliderSettings = $(selector).oSlider('settings'); 

Аргумент options позволяет изменять настройки слайдера.

const $slider = $(selector).oSlider();

$slider.oSlider('settings', {
  min: 10,
  from: 20,
});

console.log($slider.oSlider('settings')); // { min: 10, from: 20, ...rest }

oSlider('subscribe', callback)

Запускает callback функцию при каждом изменении настроек слайдера, передает объект только с измененными паматрами в аргументы callback функции.

const $slider = $(selector).oSlider();

// подписываемся
$slider.oSlider('subscribe', (changedSettings) => {
  console.log(changedSettings);
});

// устанавливаем новое значение параметру from
$slider.oSlider('settings', {
  from: 10,
});

// console.log выдаст { from: 10 }

oSlider('unsubscribe', callback)

Прекращает запуск callback функции при изменениях настроек.

const $slider = $(selector).oSlider();

const cb = ((changedSettings) => {
  console.log(changedSettings);
});

// подписываемся
$slider.oSlider('subscribe', cb);

// отписываемся
$slider.oSlider('unsubscribe', cb);

// устанавливаем новое значение параметру from
$slider.oSlider('settings', {
  from: 10,
});

// console.log не выполнится, так как функция cb удалена из подписчиков

⚔️ Для разработчиков

Если вы желаете развивать проект, ознакомьтесь с руководством для разрабочиков здесь.

📃 Лицензия

Этот проект лицензирован на условиях лицензии MIT.

Вы можете ознакомиться с содержанием лицензии здесь.

o-slider's People

Contributors

akhmadbabaev avatar

Watchers

 avatar

o-slider's Issues

Порядок указания классов

У тебя порядок в checkbox.scss нарушен селектор input идет перед label, нужно чтобы селекторы были в том порядке как указываются в pug

Тесты

Скриншот 25-04-2020 22_58_10
По хорошему общее покрытие тестами должно быть минимум 85%

README.md

Скриншот 24-03-2020 11_22_58
Добавь эти команды в README и почему у тебя не видно в ней диаграммы)

Typescript

image

  1. Почему очень многие методы и поля обозначены как protected, а не как private, хотя используются только?

  2. Использовать type assertion любого вида - крайне не тайп сейвово (в данном случае as).
    Тут же вполне есть вероятность, что элемента с таким классом не существует и тогда всё посыпется.

image

  1. Unknown используется, для того чтобы в дальнейшем была возможность сузить тип, тут тип нигде не сужается. Да и тип парметра value можно указать более точно, имхо.
    И опять же асёртить инпут, как объект с ключами c типом эни - прям ну очень нехоршо.

image

  1. Any используется только в крайних случаях. Тут явно можно указать тип таймера.
  2. Все интерфейсы должны начинаться с префикса 'I'.

Баги слайдера

GSN3QypVRR
По-хорошему, у меня не должно быть возможности выставлять слайдерам одинаковые значения и перетаскивать один за другой. Обычно в слайдерах(когда есть диапазон) мы выбираем значения между минимальным и максимальным и должна быть привязка одного бегунка как минимального значения, а второго как максимального.

Префикс js-.

По стандарту все классы, которые используются для поиска по DOM, должны иметь префикс js-.
1 пункт. Хоть правило и написано в JQuery, но предполагается и для использования с чистым js.

Шкала значений слайдера.

Было бы неплохо добавить хотя-бы крайние значения слайдера в виде шкалы. Чтобы можно было ориентироваться непосредственно по слайдеру от какого и до какого значения идёт рэнж, т.к. панель опций, по факту, не является частью плагина. (скрин для примера)
image

Раньше в задании был критерий по полностью функциональной шкале, которая отрисовывается в зависимости от шага и по значениям можно кликать, чтобы тригерить слайдер. Если добавишь такой функционал - будет только плюсом, но это не обязательно :)
Peek 2020-05-02 16-44

БЕМ

у тебя щас в _basic.scss используются стили по тегам, по БЕМу можно пользоваться только классами, нельзя использовать id
и для чего ты используешь нижнее подчеркивание) имя файлам должно соответствовать имени папке в которой они лежат

autobind

В плагине то че не используешь)

Компонентность

Скриншот 21-04-2020 23_41_33
с миксинами нужно взаимодействовать через аргументы (интерфейс) а не вставлять туда блок кода, зачем так усложнять, почему не написать код в контейнере?

Кавычки

Скриншот 16-04-2020 20_02_32
Используй в pug двойные кавычки а в scss и js одинарные

Разделение зависимостей в package.json

Нужно откорректировать разделение зависимостей на devDependencies и dependencies: в devDependencies ты должен оставить только те зависимости, которые тебе нужны исключительно в режиме разработки, и при отсутствии которых можно все равно без проблем собрать проект

Incorrect parameters validation.

If set slider parameter from or other numeric parameters as a string that contains a number ( for example { from: '20' } I get error 'from is Infinity' but he isn't.

Типы

Скриншот 25-04-2020 12_13_52
а почему ты св-ва объекта и типы значений не указал или они неизвестны?

webpack

зачем ты подключаешь jquery в o-slaider.ts ты можешь его подключить с помощью вебпака. Еще ты подключаешь стили к странице через link и скрипты через script, webpack может сам их подключать)

jQuery

$firstElement[0] для выбора индексов используй метод eq()

Именование

Скриншот 25-04-2020 11_52_42
и в обработчиках нужно указывать имя метода : this.handleБемЭлементИлиБемБлокТипСобытия

Шрифты

Необходимо всегда использовать как минимум один запасной шрифт и одно запасное семейство, сейчас это не учтено. пункт 6

JS

Скриншот 22-04-2020 00_21_38
Поиск и назначение обработчиков нужно разнести по разным методам.
const titleElement = this.element.querySelector('.checkbox__title') as HTMLElement; зачем искать checkbox__title всякий раз при вызове метода, нельзя один раз найти и сохранить в this

Убрать все id

Скриншот 16-04-2020 20_47_24
Не использовать id, кроме случаев, когда они семантически востребованы;

Когда гарантируется их уникальность например на уровне базы данных и когда вам нужно

требуется рабочая навигация в рамках одной страницы (например, как на Википедии или на этом сайте сборника best-practices;
требуется связать и , которые находятся в совершенно разных ветках дерева DOM (вообще, лучше всегда просто внутрь ставить и тогда никакие айдишники не нужны);

Компактность

В стандартах есть принцип Single Responsibility, также методы не должны быть сильно большими.
В стандартах есть принцип Single Responsibility, также методы не должны быть сильно большими. пункт 4 https://github.com/fullstack-development/front-end-best-practices/blob/master/JS/goodPractice.md)
Разбей эти 2 метода handleThumbMouseDown и handleThumbTouchStart

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.