admin管理员组文章数量:1431726
I have two range sliders, and I need to position the tooltip in them according to the screenshot.
I placed it, but when moving the slider, the tooltip does not stay at the same distance near it, but moves.
How to solve this problem?
Here is the code -
document.addEventListener('DOMContentLoaded', () => {
const sliders = document.querySelectorAll('.calculator__slider-item');
sliders.forEach((slider) => {
const tooltip = slider.nextElementSibling; // Находим tooltip
const valueDisplay = slider.parentElement.nextElementSibling; // Находим <span> для отображения значения
function updateSlider() {
const sliderRect = slider.getBoundingClientRect(); // Получаем размеры слайдера
const thumbWidth = 20; // Фиксированная ширина thumb
const min = parseInt(slider.min);
const max = parseInt(slider.max);
// Текущее значение
const value = parseInt(slider.value);
// Процентное положение слайдера
const percent = (value - min) / (max - min);
// Абсолютная позиция thumb в пикселях
const thumbPosition = percent * sliderRect.width;
// Позиционируем tooltip строго по thumb
tooltip.style.left = `${thumbPosition - tooltip.offsetWidth / 2 + thumbWidth / 2}px`;
tooltip.textContent = value;
// Обновляем отображение значения
valueDisplay.textContent = value;
}
// Инициализация
updateSlider();
// Обновление при взаимодействии
slider.addEventListener('input', updateSlider);
});
});
.slider-group {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
width: 500px;
flex-direction: column;
}
.calculator__slider-wrapper {
position: relative;
}
.calculator__tooltip {
color: red;
font-size: 16px;
font-weight: 600;
line-height: 140%;
position: absolute;
bottom: 12%;
left: 50%;
transform: translateY(-50%);
}
.calculator__slider-item {
width: 100%;
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-appearance: none;
min-height: 40px;
border-radius: 8px;
overflow: hidden;
padding: 0 10px 0 20px;
}
.calculator__slider-item::-webkit-slider-thumb {
-webkit-appearance: none;
width: 20px;
height: 40px;
background: #fff;
border: 4px solid #26bb01;
border-radius: 8px;
cursor: pointer;
box-shadow: -410px 0 0 400px #26bb01;
}
<div class="calculator__item slider-group">
<div class="calculator__slider">
<label for="hours">Часов в день</label>
<div class="calculator__slider-wrapper">
<input type="range" id="hours" min="2" max="12" value="8" class="calculator__slider-item" />
<div class="calculator__tooltip"></div>
</div>
<span class="calculator__slider-value" id="hours-value">8</span>
</div>
<div class="calculator__slider">
<label for="days">Дней в месяц</label>
<div class="calculator__slider-wrapper">
<input type="range" id="days" min="3" max="31" value="20" class="calculator__slider-item" />
<div class="calculator__tooltip"></div>
</div>
<span class="calculator__slider-value" id="days-value">20</span>
</div>
</div>
本文标签:
版权声明:本文标题:javascript - How do I position the tooltip always at the same distance from the thumb in the range slider? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745559761a2663401.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论