Не совсем получается ограничить движение маркера по слайдеру.
const mark = document.getElementById('marker');
const slider = document.getElementById('slider');
mark.onmousedown = function(e) {
let value = e.pageX - slider.offsetLeft - (mark.offsetWidth / 2);
function moveAt(e) {
mark.style.left = e.pageX - slider.offsetLeft - (mark.offsetWidth / 2) + 'px';
}
document.onmousemove = function (e) {
if(value > 0 && value < 380 ){ // value сравнивается сначала с left: 0px , потом с left: 380px, сам маркер задан абсолютным позиционированием
moveAt(e);
console.log(value);
}
else{
console.log("Что-то сделать"); // проблема в том что else срабатывает после отпускания маркера
}
}
document.onmouseup = function () {
document.onmousemove = null;
mark.onmouseup = null;
}
}
#slider{
position: relative;
width: 400px;
height: 40px;
background: #d5dbe5;
margin: 30px auto;
}
#marker{
position: absolute;
width: 20px;
height: 40px;
background: gray;
}
<div id="slider">
<div id="marker"></div>
</div>
Вы один раз вычисляете
let value = e.pageX - slider.offsetLeft - (mark.offsetWidth / 2);
и потом сравниваете это значение с ограничителями. Его надо рассчитывать каждый раз, чтоб оно было актуальным.
const mark = document.getElementById('marker');
const slider = document.getElementById('slider');
mark.onmousedown = e => {
let value = e.pageX - slider.offsetLeft - (mark.offsetWidth / 2);
const moveAt = value => {
mark.style.left = value + 'px';
}
document.onmousemove = e => {
value = e.pageX - slider.offsetLeft - (mark.offsetWidth / 2);
if(value > 0 && value < 380 ){
moveAt(value);
}else{
moveAt(value>0?380:0);
}
}
document.onmouseup = () => {
document.onmousemove = null;
mark.onmouseup = null;
}
}
#slider{
position: relative;
width: 400px;
height: 40px;
background: #d5dbe5;
margin: 30px auto;
}
#marker{
position: absolute;
width: 20px;
height: 40px;
background: gray;
}
<div id="slider">
<div id="marker"></div>
</div>
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники