To update while dragging the slider, listen for the mousemove event.
For this solution, the target range input element (slider), uses a mousemove event handler that will update for the current (live) position value of the slider.
To limit movement detection to when the slider is being dragged:
- On
mousedown, attach a handler for mousemove events.
- On
mouseup, remove the mousemove handler.
This is in addition to a change event handler, which is the advised way of getting any final changes to an elements value.
Try it on fiddle ⎤↗︎
<input type="range" id="rangevalue">
var rangevalue = document.getElementById('rangevalue');
rangevalue.addEventListener("change", arduino);
rangevalue.addEventListener("mousedown", enabletracking);
rangevalue.addEventListener("mouseup", disabletracking);
function enabletracking() { rangevalue.addEventListener( "mousemove", arduino); }
function disabletracking() { rangevalue.removeEventListener("mousemove", arduino); }
Touch Support
Further more you may want to add touch support as some browsers handle things differently.
One thing is touch events can trigger other events we are listening to which will cause problems if we're updating from everywhere.
Disabling this default behaviour is possible but has other side effects. For example, page scrolling is usually handled by touch events and will not work while default behaviour is disabled.
rangevalue.addEventListener("touchstart", enableTouchTracking );
rangevalue.addEventListener("touchend", disableTouchTracking);
rangevalue.addEventListener("touchcancel", disableTouchTracking);
function enableTouchTracking(event)
{
event.preventDefault();
rangevalue.addEventListener("touchmove", handleTouchMove);
}
function disableTouchTracking(event)
{
event.preventDefault();
rangevalue.removeEventListener("touchmove", handleTouchMove);
}
function handleTouchMove(event)
{
event.preventDefault();
arduino();
}