Determine click position on progress bar?

前端 未结 8 1806
傲寒
傲寒 2021-02-08 19:38

Is it possible to determine the value/position of a user\'s click on a progress bar using plain javascript?

Currently, I can detect a click on the element but can only g

相关标签:
8条回答
  • 2021-02-08 20:27

    You can get the coordinates of where you clicked inside of the element like this:

    Just subtract the offset position of the element from the coordinate of where the page was clicked.

    Updated Example

    document.getElementById('progressBar').addEventListener('click', function (e) {
        var x = e.pageX - this.offsetLeft, // or e.offsetX (less support, though)
            y = e.pageY - this.offsetTop,  // or e.offsetY
            clickedValue = x * this.max / this.offsetWidth;
    
        console.log(x, y);
    });
    

    If you want to determine whether the click event occurred within the value range, you would have to compare the clicked value (in relation to the element's width), with the the value attribute set on the progress element:

    Example Here

    document.getElementById('progressBar').addEventListener('click', function (e) {
        var x = e.pageX - this.offsetLeft, // or e.offsetX (less support, though)
            y = e.pageY - this.offsetTop,  // or e.offsetY
            clickedValue = x * this.max / this.offsetWidth,
            isClicked = clickedValue <= this.value;
        
        if (isClicked) {
            alert('You clicked within the value range at: ' + clickedValue);
        }
    });
    <p>Click within the grey range</p>
    <progress id="progressBar" value="5" max="10"></progress>

    0 讨论(0)
  • 2021-02-08 20:31

    I found a simple solution with pure javascript.

    using getBoundingClientRect() there are all properties to calculate the percentage.

    document.getElementById('progressBar').addEventListener('click', function (e) {
        var bounds = this.getBoundingClientRect();
        var max = bounds.width //Get width element
        var pos = e.pageX - bounds.left; //Position cursor
        var dual = Math.round(pos / max * 100); // Round %
    
        console.log('percentage:', dual);
    });
    
    0 讨论(0)
提交回复
热议问题