#javascript #reactjs #react-dom
Вопрос:
Я пытаюсь создать пользовательский интерфейс будильника с помощью react, и я застрял в этом компоненте, где пользователи могут прокручивать или прокручивать часы, минуты и т.д.. Я попробовал некоторые методы, но потерпел неудачу.
Я попробовал прокрутку, колесо, но моя проблема в том, что я просто не могу получить точное значение, которое видит пользователь(например, 03:30 вечера). Я не хочу, чтобы вы помогали мне с кодом, просто мне нужно знать, как к этому подойти.
Комментарии:
1. ваша проблема в том, что вы не можете остановить прокрутку при точном значении, останавливается ли она где-то посередине?
2. @KartikMalik Нет, братан, на самом деле, я не могу понять, как это реализовать.
3. @KartikMalik Некоторые из вариантов, которые я пробовал, были следующими: 1. Я использовал divs для рендеринга каждый час, и когда пользователь прокручивал, я использовал внутренний html. 2. Нажмите один раз, чтобы получить значение. Но на самом деле я хочу, чтобы вы могли прокручивать, и всякий раз, когда они останавливают прокрутку, я должен получить это конкретное состояние.
4. Ладно, я понял твою проблему. Я постараюсь рассмотреть решение в разделе ответов ниже, можете ли вы также поделиться своим техническим стеком. Это ванильный JS или вы используете что-то вроде React?
5. @KartikMalik Это братан
Ответ №1:
Я бы подошел к этой проблеме так
давайте решим эти проблемы здесь
- Прокрутка только до нужных точек
- Циклическая прокрутка
- Автоматический выбор значения — без нажатия в основном.
Прокрутка только до нужных точек
Эта концепция называется мгновенной прокруткой, вы можете использовать для этого какую-нибудь библиотеку, чтобы не писать ее логику самостоятельно, потому что тогда вам придется обрабатывать множество крайних случаев.
Циклическая прокрутка
Вам нужно справиться с этим, используя базовую логику JS, вы можете предоставить некоторые дополнительные буферные элементы в конце и в начале см. этот пример
https://codepen.io/lemmin/pen/bqNBpK
window.onscroll = function () {
// Horizontal Scroll.
var y = document.body.getBoundingClientRect().top;
page.scrollLeft = -y;
// Looping Scroll.
var diff = window.scrollY - dummy_x;
if (diff > 0) {
window.scrollTo(0, diff);
}
else if (window.scrollY == 0) {
window.scrollTo(0, dummy_x);
}
}
Автоматический выбор значения
один очень простой подход может заключаться в том, что вы можете получить смещение прокрутки при изменении прокрутки, и, поскольку у вас есть высота каждого объекта, вы можете получить элемент, который находится в фокусе(или выделен для пользователя).
Ниже приведен еще один подход, вы можете создать div селектора, затем вы можете проверить перекрытие при остановке прокрутки, какой бы элемент ни находился в этом div, вы можете получить его значение.
лично я думаю, что первый подход будет проще и стабильнее. Я видел людей, использующих оба типа подходов.
дайте мне знать, если сможете помочь с чем-нибудь еще.