Fix slider step
Use the value of the `step` attribute if no keyboard steps are specified. (cherry picked from commit 7d27596d6b7545a4d48cc03e26b4f32a3729c591)
This commit is contained in:
parent
286bbcbebc
commit
b7be3af21c
1 changed files with 25 additions and 4 deletions
|
@ -19,6 +19,27 @@ if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns normalized slider step.
|
||||
*
|
||||
* @param {HTMLInputElement} range slider itself
|
||||
* @param {number|undefined} step step
|
||||
* @returns {number} normalized slider step.
|
||||
*/
|
||||
function normalizeSliderStep(range, step) {
|
||||
if (step > 0) {
|
||||
return step;
|
||||
}
|
||||
|
||||
step = parseFloat(range.step);
|
||||
|
||||
if (step > 0) {
|
||||
return step;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns slider fraction corresponding to client position.
|
||||
*
|
||||
|
@ -37,7 +58,7 @@ function mapClientToFraction(range, clientX) {
|
|||
// Snap to step
|
||||
const valueRange = range.max - range.min;
|
||||
if (range.step !== 'any' && valueRange !== 0) {
|
||||
const step = (range.step || 1) / valueRange;
|
||||
const step = normalizeSliderStep(range) / valueRange;
|
||||
fraction = Math.round(fraction / step) * step;
|
||||
}
|
||||
|
||||
|
@ -56,7 +77,7 @@ function mapFractionToValue(range, fraction) {
|
|||
|
||||
// Snap to step
|
||||
if (range.step !== 'any') {
|
||||
const step = range.step || 1;
|
||||
const step = normalizeSliderStep(range);
|
||||
value = Math.round(value / step) * step;
|
||||
}
|
||||
|
||||
|
@ -455,13 +476,13 @@ function onKeyDown(e) {
|
|||
switch (keyboardnavigation.getKeyName(e)) {
|
||||
case 'ArrowLeft':
|
||||
case 'Left':
|
||||
stepKeyboard(this, -this.keyboardStepDown || -1);
|
||||
stepKeyboard(this, -normalizeSliderStep(this, this.keyboardStepDown));
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
break;
|
||||
case 'ArrowRight':
|
||||
case 'Right':
|
||||
stepKeyboard(this, this.keyboardStepUp || 1);
|
||||
stepKeyboard(this, normalizeSliderStep(this, this.keyboardStepUp));
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue