Неверные координаты при повторном клике

    zz = false;
    div.onpointerdown = div.onpointermove = e => {
        console.log( e.offsetX);
        e.type == 'pointerdown' && (zz = 2, div.setPointerCapture(e.pointerId)) // Клик по элементу
        if(zz)
            pl.style.width  = (x = (pp =  e.offsetX / div.clientWidth * 100) > 100 ? 100 : pp < 0 ? 0 : pp)+ '%';
    }

    div.onpointerup = _ => (zz = false)
  #div {
    height: 5px;
    width: 100%;
    border: 1px solid #000;
    touch-action: none;
  }
  #pl {
    position: relative;
    width: 0;
    height: 100%;
    background: red
  }
   i {
    display: block;
   touch-action: none;
    height: 10px;
    width: 10px;
    border-radius: 50%;
    background: red;
    position: absolute;
    right: 0;
    transform: translate(55%, -30%);
    box-shadow: 0 0 4px rgb(0 0 0 / 41%);
    transition: 50ms all ease-in-out;
    z-index: 5;
}
<div id=div>
    <div id=pl><i></i></div>
</div>

Без блока 'i' работает. А с ним, первый раз кликаем, верно показывает offsetX. Как кликнули, не делаем движения курсора, а кликаем повторно. В данный момент он не верно показывает offsetX. В чем тут дело?


Ответы (1 шт):

Автор решения: Опан

<style>
#div {
    height: 5px;
    width: 100%;
    border: 1px solid #000;
    touch-action: none;
    position: absolute;
    left: 15px;
}
#pl {
    position: relative;
    width: 0;
    height: 100%;
    background: red;
}
i {
    display: block;
    touch-action: none;
    height: 10px;
    width: 10px;
    border-radius: 50%;
    background: red;
    position: absolute;
    right: 0;
    transform: translate(55%, -30%);
    box-shadow: 0 0 4px rgb(0 0 0 / 41%);
    transition: 50ms all ease-in-out;
    z-index: 5;
}
</style>
<div id=div>
    <div id=pl><i></i></div>
</div>
<script>
let zz = false;
const seek = e => {
    let plwidth = e.pageX - parseInt(window.getComputedStyle(div).getPropertyValue('left'));
    console.log(Math.round(plwidth));
    pl.style.width = plwidth + 'px';
}
div.onpointerdown = e => {
    zz = true;
    seek(e);
}
div.onpointerup = _ => zz = false;
div.onpointermove = e => {
    if(zz){
        seek(e);
    }
}
</script>

→ Ссылка