Javascript 基于位置使用MouseeEvent触发输入滑块的更改

Javascript 基于位置使用MouseeEvent触发输入滑块的更改,javascript,mouseevent,eventtrigger,Javascript,Mouseevent,Eventtrigger,使用给定的代码: var i = document.createElement("input"); i.type='range'; i.style.width = window.innerWidth + 'px'; i.style.height=window.innerHeight + 'px'; i.style.position = "absolute"; i.style.top = 0; i.style.left = 0; document.body.appendChild(i); 我得到

使用给定的代码:

var i = document.createElement("input");
i.type='range';
i.style.width = window.innerWidth + 'px';
i.style.height=window.innerHeight + 'px';
i.style.position = "absolute";
i.style.top = 0;
i.style.left = 0;
document.body.appendChild(i);
我得到了一个覆盖整个视口的滑块,我单击的任何地方都会将滑块点移动到等效的x位置。当我尝试模拟鼠标单击范围输入元素以使用MouseEvent移动滑块点时,我没有得到相同的结果

var evt = new MouseEvent('click', {
    button: 0,
    detail: 1,
    screenX: 20,
    screenY: 50,
    clientX: 20,
    clientY: 50,
    bubbles: true,
    composed: true
});
i.dispatchEvent(evt);

如何以与鼠标相同的编程方式触发滑块移动到相应的x位置?

范围输入根据其值、最大值和最小值确定其位置。您无需模拟鼠标单击;只需相应地设置其值。您在创建输入时没有自己设置最小值和最大值,因此它将使用默认范围[01100]。这让数学变得很简单

通常,使用以下公式可以使滑块位于正确的位置:

i.value = (desired_x - min_x) / width * (max - min) + min
由于max=100、min=0、min_x=0和width=window.innerWidth,因此简化为:

i.value = desired_x / window.innerWidth * 100

范围输入根据其值、最大值和最小值确定其位置。您无需模拟鼠标单击;只需相应地设置其值。您在创建输入时没有自己设置最小值和最大值,因此它将使用默认范围[01100]。这让数学变得很简单

通常,使用以下公式可以使滑块位于正确的位置:

i.value = (desired_x - min_x) / width * (max - min) + min
由于max=100、min=0、min_x=0和width=window.innerWidth,因此简化为:

i.value = desired_x / window.innerWidth * 100

您是对的,这会更简单,但我希望通过用户交互,基于另一个dom元素的位置触发输入值的更改,而无需单击滑块本身或使用键盘键。这可能吗?我不知道我是否理解。我为您提供了无需单击滑块或使用键盘即可更改值的解决方案。还有什么DOM元素应该触发它,以及通过什么用户交互?我希望能够以编程方式触发它,但基于一些屏幕坐标。如果如您所述,并且该值对应于元素宽度的一小部分(与两侧都有一些内置填充相反),那么通常我必须通过
getBoundingClientRect()找到元素的位置和形状
并根据您用
event\ux
显示为
desired\ux
rect.x
显示为
min\ux
rect.width
显示为
width
的公式计算其值<代码>最大值和
最小值
可以从元素属性中提取,默认值如下所述。我想这正是你想要的,因为这会更简单,但我希望通过用户交互,基于另一个dom元素的位置触发输入值的更改,而无需单击滑块本身或使用键盘键。这可能吗?我不知道我是否理解。我为您提供了无需单击滑块或使用键盘即可更改值的解决方案。还有什么DOM元素应该触发它,以及通过什么用户交互?我希望能够以编程方式触发它,但基于一些屏幕坐标。如果如您所述,并且该值对应于元素宽度的一小部分(与两侧都有一些内置填充相反),那么通常我必须通过
getBoundingClientRect()找到元素的位置和形状
并根据您用
event\ux
显示为
desired\ux
rect.x
显示为
min\ux
rect.width
显示为
width
的公式计算其值<代码>最大值和
最小值
可以从元素属性中提取,默认值如下所述。我想这就是我想要的