#javascript #html #css #reactjs
#javascript #HTML #css #reactjs
Вопрос:
В настоящее время я пытаюсь выяснить, как переместить пузырь, который содержит текущее значение элемента input type =»range». Я имею в виду, что моя цель — когда я перемещаю большой палец ползунка, пузырь тоже будет перемещаться вместе с ним, поэтому пузырь всегда будет находиться над большим пальцем ползунка.
Я пытался найти это в Google, но все, что я могу найти, это то, как оформить этот div, чтобы он выглядел как bubble, и небольшой код для отображения его точно над большим пальцем слайдера, но у меня это не работает, и я не могу понять, как заставить его работать или как вычислить позицию, в которой он будет отображаться.
Код, который я нашел
const
range = document.getElementById('range'),
rangeV = document.getElementById('rangeV'),
setValue = ()=>{
const
newValue = Number( (range.value - range.min) * 100 / (range.max - range.min) ),
newPosition = 10 - (newValue * 0.2);
rangeV.innerHTML = `<span>${range.value}</span>`;
rangeV.style.left = `calc(${newValue}% (${newPosition}px))`;
};
document.addEventListener("DOMContentLoaded", setValue);
range.addEventListener('input', setValue);
Я работаю в React, и результатом этого будет приложение BMI calculator.
Кто-нибудь сталкивался с проблемой такого типа? Я буду рад каждому совету или объяснению. Спасибо.
ссылка на codesandbox :https://codesandbox.io/s/suspicious-tereshkova-ujk45?file=/src/Components/Button.js
Ответ №1:
Хотя не рекомендуется использовать ванильный javascript для неконтролируемых компонентов в react. Смотрите React useRef. Но у вас уже есть решение. Все, что вам нужно сделать, это поместить этот фрагмент в хук useEffect() в Range.js .
В Range.js
function Range(props) {
useEffect(() => {
const
range = document.getElementById('range'),
rangeV = document.getElementById('rangeV'),
setValue = ()=>{
const
newValue = Number( (range.value - range.min) * 100 / (range.max - range.min) ),
newPosition = 10 - (newValue * 0.2);
rangeV.innerHTML = `<span>${range.value}</span>`;
rangeV.style.left = `calc(${newValue}% (${newPosition}px))`;
};
document.addEventListener("DOMContentLoaded", setValue);
range.addEventListener('input', setValue);
}, [])
...//rest of Range.js
Смотрите https://jsfiddle.net/7wmgspvq/3 /
Комментарии:
1. спасибо за ваш ответ. Я столкнулся с небольшой проблемой. При загрузке страницы пузырь находится в левой части диапазона типов ввода. Если я удалю этот интервал в начале, в начале пузырька не будет, но когда я нажимаю на попытку перетащить ползунок, он появляется. Есть ли какие-либо способы сделать пузырь над ползунком при загрузке страницы?