我正在创建一个范围类型的输入。
slider = document.createElement('input');
slider.type = 'range';
slider.min = 0.25;
slider.max = 2.5;
slider.step = 0.05;
slider.value = playbackSpeed; // переменная хранит 1.5
slider.className = 'sliderSpeed';
然后我把听众挂在上面:
slider.addEventListener('wheel', (e) =>
{
console.log(e.deltaY, Math.sign(e.deltaY));
if (Math.sign(e.deltaY) == 1)
{
console.log(slider.value, '-=', slider.step);
slider.value -= slider.step;
}
else
{
console.log(slider.value, '+=', slider.step);
slider.value += slider.step;
}
slider.dispatchEvent(new Event('input', { bubbles: true }));
e.preventDefault();
});
slider.addEventListener('input', (e) =>
{
video.playbackRate = parseFloat(e.target.value);
});
也就是说,当向下滚动滚轮时,我们从 value 中减去一个 step。有用。但由于某种原因,向上滚动时,值总是设置为 1.4。
slider = document.createElement('input');
slider.type = 'range';
slider.min = 0.25;
slider.max = 2.5;
slider.step = 0.05;
slider.value = 1.5; // переменная хранит 1.5
slider.className = 'sliderSpeed';
document.body.append(slider);
slider.addEventListener('wheel', (e) =>
{
console.log(e.deltaY, Math.sign(e.deltaY));
if (Math.sign(e.deltaY) == 1)
{
console.log(slider.value, '-=', slider.step);
slider.value -= slider.step;
console.log('new value', slider.value);
}
else
{
console.log(slider.value, '+=', slider.step);
slider.value += slider.step;
console.log('new value', slider.value);
}
slider.dispatchEvent(new Event('input', { bubbles: true }));
e.preventDefault();
});
//slider.addEventListener('input', (e) =>
//{
// video.playbackRate = parseFloat(e.target.value);
//});
咳咳......问题的解决方案原来是 parseFloat 的值和步骤。估计埋在什么地方了。。
问题原来是数据类型。
slider.value
存储一个字符串,就像 一样slider.step
,所以它+=
只是添加了字符串。@teran 在评论中还建议 if ... else 构造可以缩短为:
(本例中为减号,因为向下滚动时,数字为正数,Math.sign 返回正数,但逻辑上,我们需要向下滚动时减去。)
全部的: