Javascript:mousewheel事件中输入值总和跳到最大值

Javascript:mousewheel事件中输入值总和跳到最大值,javascript,html,Javascript,Html,标题概括了这一点。我正在尝试对鼠标滚轮事件上的输入的值进行减法和求和。减法成功,但总和总是跳到输入的最大值。没有库,纯JS和兼容性对我来说无关紧要,因为它是一个电子应用程序。 我还有另一个选择,我并不完全倾向于使用它,因为对我来说,它很难看:创建一个变量来求和和和减去值,设置它的最大值和最小值,然后发送到input.value(但由于某种原因,我无法设置变量的最小值或最大值)。 现在的问题是:这是一个bug还是我做错了什么 let range=document.getElementById(

标题概括了这一点。我正在尝试对
鼠标滚轮
事件上的
输入
的值进行减法和求和。减法成功,但总和总是跳到
输入的最大值。没有库,纯JS和兼容性对我来说无关紧要,因为它是一个电子应用程序。
我还有另一个选择,我并不完全倾向于使用它,因为对我来说,它很难看:创建一个变量来求和和和减去值,设置它的最大值和最小值,然后发送到
input.value
(但由于某种原因,我无法设置变量的最小值或最大值)。 现在的问题是:这是一个bug还是我做错了什么

let range=document.getElementById(“测试”);
设onWheel=(函数(evt){
如果(!evt)evt=事件;
让韦尔塔;
wDelta=evt.wheelDelta>0?1:-1;
如果(wDelta==1){
range.value+=wDelta;
控制台日志(wDelta);
}否则{
range.value-=1;
控制台日志(wDelta);
}
document.getElementById('out').innerHTML=range.value;
console.log(range.value);
});
range.addEventListener('mouseweel',onWheel,false)

鼠标滚轮事件触发速度非常快,您的射程仅为1-5,因此很难仅“滚动”1。对于1-5类型的场景来说,可能不是一个好的用例

下面是“填充”滚轮的代码,这样滚轮就不会快速启动

let range=document.getElementById(“测试”);
设padVal=false;
设onWheel=(函数(evt){
如果(!evt)evt=事件;
让韦尔塔;
设min=range.min;
设max=range.max;
设val=range.value;
让排列=最大-最小+1;
让pad=100/摊铺;
如果(padVal==false)
padVal=val*pad;
控制台日志(最小、最大、val、排列、pad、padVal、数学地板(padVal/pad));
wDelta=evt.wheelDelta>0?1:-1;
padVal+=wDelta
range.value=数学地板(padVal/pad);
document.getElementById('out').innerHTML=range.value;
});
range.addEventListener('mouseweel',onWheel,false)

事实证明,这实际上是一个数据类型问题:因为
range.value
返回一个字符串,
range.value+=1
将执行字符串串联而不是整数相加。解决方法很简单:

range.value = parseInt(range.value) + wDelta;
奇怪的是,这只影响加法情况,因为
-
运算符执行隐式整数转换

let range=document.getElementById(“测试”);
设onWheel=(函数(evt){
如果(!evt)evt=事件;
设wDelta=evt.wheelDelta>0?1:-1;
range.value=parseInt(range.value)+wDelta;
document.getElementById('out').innerHTML=range.value;
});
range.addEventListener('mouseweel',onWheel,false)


请在问题本身中,而不是在第三方网站上提供所有相关代码。这可能是一个注释,而不是答案。这也是错误的,OP将任何大于0的增量转换为1,小于0的增量转换为1-1@JuanMendes这就是为什么它应该成为评论的原因之一:)@Armin我不同意,它不应该是一个答案,因为它甚至没有试图回答这个问题,它只是提供了一个小指针(在这种情况下不相关)。OP还不能发表评论。顺便说一句,对不起,在提出解决方案之前,我提前提交了我的答案。我已经用我正在编写的代码更新了答案。小的改进:用
range.value=parseInt(range.value)+wDelta替换if/else