Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Создаём нормальный range #5441

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

loonlylokly
Copy link
Contributor

@loonlylokly loonlylokly commented Jul 16, 2024

Описание

Написал статью с подробной реализацией слайдера с помощью тэга <input type="range".

Closes #472

Превью: https://content-5441.dev.doka.guide/recipes/input-range-style/

Чек-лист

  • Текст оформлен согласно руководству по стилю
  • Ссылки на внутренние материалы начинаются со слеша и заканчиваются слэшем либо якорем на заголовок (/css/color/, /tools/json/, /tools/gulp/#kak-ponyat)
  • Ссылки на картинки, видео и демки относительные (images/example.png, demos/example/, ../demos/example/)

@github-actions github-actions bot added the рецепт Контент для Рецептов label Jul 16, 2024
@loonlylokly
Copy link
Contributor Author

loonlylokly commented Jul 16, 2024

Это лишь черновой вариант, который в ближайшее время будет дописан. Хочу спросить на счёт объема. У меня получается около 1000 строк. Я понимаю, что большая часть это код, но всё-таки это достаточно много. И я не знаю как сократить. В теории можно перенести разделы с 2-мя и 4-мя ползунками в раздел "На практике".

И у меня 500 ошибка при попытке открыть превью((

@github-actions github-actions bot added the статья Расширенный материал label Jul 24, 2024
@solarrust
Copy link
Member

Прости, что сразу коммитом, а не предложениями. Было почему-то проще думать над текстом прямо пальцами. Посмотри, пожалуйста, на новые варианты заголовка и дескрипшена. Нравится ли тебе? Можем пообсуждать и поменять, если захочешь.

@solarrust
Copy link
Member

Я понимаю, что рецепт ещё в процессе написания, поэтому я потрогала лапкой только самое его начало:

  • Немного подсушила вступление, чтобы проще читалось
  • Поменяла заголовок первого блока про термины и внутри актуализировала имена элементов, из которых состоит наш рендж. Опиралась на устоявшуюся в русскоязычной среде практику. Если ты согласен с такими наименованиями, пожалуйста, поправь это в тексте ниже.
  • Убрала закрывающие слэши у одиночных тегов в тексте и в демках.
  • Добавила двоеточие для ::before и ::after.
  • Чуть подправила форматирование, но пока без фанатизма.
  • Поменяла в JS в демках двойные кавычки на одинарные и убрала точки с запятой.
  • Подправила опечатки в тексте.

У меня осталась пара вопросов:

  1. Последние демки строятся на большом количестве переменных. Посмотри, пожалуйста, на них пристально, подумай, правда ли надо так много?
  2. Не везде, но в некоторых местах, кажется, можно было бы использовать новые трюки типа inset и width + aspect-ratio. Как думаешь?

Пожалуйста, продолжай работу в комфортном тебе темпе. Мне очень хочется увидеть финальный результат =)

Copy link

Превью контента из 70d2dcc опубликовано.

@loonlylokly
Copy link
Contributor Author

loonlylokly commented Jul 24, 2024

  • Последние демки строятся на большом количестве переменных. Посмотри, пожалуйста, на них пристально, подумай, правда ли надо так много?

  • Не везде, но в некоторых местах, кажется, можно было бы использовать новые трюки типа inset и width + aspect-ratio. Как думаешь?

  1. Сначала их было 1-2, но потом я начал делать вертикальные варианты и горизонтальный в другую сторону. И понял, что если хочется универсальный рендж, который одновременно может быть сразу во все стороны и изменить нужно будет только два атрибута в html. Получился по сути полноценный компонент.
  2. БОЛЬШОЕ СПАСИБО про inset. Я не знал об этом сокращении!!!! Просто супер, большое спасибо. aspect-ratio уже добавил, но не залил.

Переменные прям очень хорошо решают проблему поворотов элемента и не хотелось бы от них отказываться.

Правки в тексте обязательно учту и поправлю.
По поводу : и ; и /> это у меня vscode форматирует на автомате, и в целом привык к такому стилю, по предыдущей статье понял, что нужно поддерживать стиль доки и буду редачить, сейчас пока грязный вариант пишу.

Завис на последней проблеме. Обработка клика по трэку, для рэнджа с двумя ползунками, чтобы ближайший из двух ползунков перемещался к месту клика и изменялись данные, а ползунок становился активным. Реализую её и буду чистить текст и дописывать его.

Вот дэмку можно глянуть, но пока мне не нравиться js код и он не дописан для обработки клика по трэку.
https://codepen.io/lonlylokly/pen/YzoyMjE

@solarrust
Copy link
Member

Вот дэмку можно глянуть, но пока мне не нравиться js код и он не дописан для обработки клика по трэку. https://codepen.io/lonlylokly/pen/YzoyMjE

Призову @HellSquirrel посмотреть на JS-код демки

aria-valuemin="0"
aria-valuemax="100"
aria-orientation="horizontal"
oninput="handleInputRange()"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

>
</div>
<script>
function handleInputRange() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// handleInputRage as is
document.querySelector('.range-input').addEventlistener('input', handleInputRange)

</datalist>
</div>
<script>
function handleInputRange1() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут можно вот так переписать покороче (и убрать oniput)

const createHandler = (valueName) => (event) => {
    event.target.parentNode.parentNode.style.setProperty(
      valueName,
      event.target.value
    )
    event.target.nextElementSibling.value = event.target.value
  }
};

document.querySelectorAll('.range-input').forEach((rangeInput, idx) => {
    rangeInput.addEventListener('input', createHandler(`--value-${idx + 1}`));
});

@solarrust
Copy link
Member

Пинг? 👀

@loonlylokly
Copy link
Contributor Author

На месте, не хватает времени. Все демки в codepen готовы, нужно только дописать текст.
Это я для этого ПР недавно спрашивал, как обновить ветку локально, когда в ПР есть чужие коммиты. Надеюсь на этой неделе дописать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
рецепт Контент для Рецептов статья Расширенный материал
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Создаём нормальный range
4 participants