直接给滑块设置值
Set value to slider directly
Javascript 对我来说是一个新的语言,所以这是一个我无法完成的简单任务。当我更改滑块时,我可以设置滑块并更新元素的位置:
// Setup a ui.
webglLessonsUI.setupSlider("#x", {slide: updatePosition(0), max: gl.canvas.width });
webglLessonsUI.setupSlider("#y", {slide: updatePosition(1), max: gl.canvas.height});
更新位置为:
function updatePosition(index) {
return function(event, ui) {
translation[index] = ui.value;
drawScene();
};
}
但现在我只想设置滑块的值(因为我有回到默认位置的功能),我做不到。
我尝试了很多东西,例如:
webglLessonsUI.UpdateUI($('#x'), 0);
并且:
$('#x').value = 0;
或者:
$('#x').slide = 0;
使用这些 UI 组件的教程是这个:
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-translation.html
和ui组件在这里,如果link添加到html,可以直接使用,甚至教程本身(link上面)都有运行 Web 本身的滑块所需的代码。
https://webgl2fundamentals.org/webgl/resources/webgl-lessons-ui.js
只想直接操作滑块的值。
非常感谢任何帮助,谢谢
根据您提供的示例,我认为需要做几件事才能实现这一目标。首先,第 98 行和第 99 行的 main()
函数像这样设置滑块:
webglLessonsUI.setupSlider("#x", {slide: updatePosition(0), max: gl.canvas.width });
webglLessonsUI.setupSlider("#y", {slide: updatePosition(1), max: gl.canvas.height});
如果我们检查您提供的库(大约第 99 行),我们可以看到函数 setupSlider
returns 是一个包含 html 引用和更新其函数的对象值:
return {
elem: parent,
updateValue: (v) => {
v /= step;
sliderElem.value = v;
updateValue(v);
},
};
这里的问题是代码没有将此对象分配给您访问的任何引用(变量),因此基本上创建了元素,将侦听器设置为 HTML 元素但是当您调用$('#x')
您正在访问 HTML 引用,而不是具有更新功能的对象。
所以我做的第一件事就是添加几个全局变量来存储从 setupSlider
:
返回的对象
let slider1,
slider2
然后我们更改示例的第 99 和 98 行来存储返回的对象,如下所示:
slider1 = webglLessonsUI.setupSlider("#x", {slide: updatePosition(0), max: gl.canvas.width });
slider2 = webglLessonsUI.setupSlider("#y", {slide: updatePosition(1), max: gl.canvas.height});
这允许我们在其他函数上访问它们,因此我创建了一个函数来更改给定滑块对象的值:
function updateSlider(slider, value) {slider.updateValue(value)}
在我的例子中,为简单起见,我创建了一个在 2 秒后调用此函数的超时,但您可以将此函数分配给 onClick 事件或基本上任何您想要的。
这是我做的例子:
如果您等待几秒钟,您应该会看到滑块 x 将其值更新为 100,我并不担心更新 Ui 的其余部分,但我认为这超出了问题。
希望对您有所帮助!
Javascript 对我来说是一个新的语言,所以这是一个我无法完成的简单任务。当我更改滑块时,我可以设置滑块并更新元素的位置:
// Setup a ui.
webglLessonsUI.setupSlider("#x", {slide: updatePosition(0), max: gl.canvas.width });
webglLessonsUI.setupSlider("#y", {slide: updatePosition(1), max: gl.canvas.height});
更新位置为:
function updatePosition(index) {
return function(event, ui) {
translation[index] = ui.value;
drawScene();
};
}
但现在我只想设置滑块的值(因为我有回到默认位置的功能),我做不到。 我尝试了很多东西,例如:
webglLessonsUI.UpdateUI($('#x'), 0);
并且:
$('#x').value = 0;
或者:
$('#x').slide = 0;
使用这些 UI 组件的教程是这个:
https://webgl2fundamentals.org/webgl/lessons/webgl-2d-translation.html
和ui组件在这里,如果link添加到html,可以直接使用,甚至教程本身(link上面)都有运行 Web 本身的滑块所需的代码。
https://webgl2fundamentals.org/webgl/resources/webgl-lessons-ui.js
只想直接操作滑块的值。 非常感谢任何帮助,谢谢
根据您提供的示例,我认为需要做几件事才能实现这一目标。首先,第 98 行和第 99 行的 main()
函数像这样设置滑块:
webglLessonsUI.setupSlider("#x", {slide: updatePosition(0), max: gl.canvas.width }); webglLessonsUI.setupSlider("#y", {slide: updatePosition(1), max: gl.canvas.height});
如果我们检查您提供的库(大约第 99 行),我们可以看到函数 setupSlider
returns 是一个包含 html 引用和更新其函数的对象值:
return {
elem: parent,
updateValue: (v) => {
v /= step;
sliderElem.value = v;
updateValue(v);
},
};
这里的问题是代码没有将此对象分配给您访问的任何引用(变量),因此基本上创建了元素,将侦听器设置为 HTML 元素但是当您调用$('#x')
您正在访问 HTML 引用,而不是具有更新功能的对象。
所以我做的第一件事就是添加几个全局变量来存储从 setupSlider
:
let slider1,
slider2
然后我们更改示例的第 99 和 98 行来存储返回的对象,如下所示:
slider1 = webglLessonsUI.setupSlider("#x", {slide: updatePosition(0), max: gl.canvas.width });
slider2 = webglLessonsUI.setupSlider("#y", {slide: updatePosition(1), max: gl.canvas.height});
这允许我们在其他函数上访问它们,因此我创建了一个函数来更改给定滑块对象的值:
function updateSlider(slider, value) {slider.updateValue(value)}
在我的例子中,为简单起见,我创建了一个在 2 秒后调用此函数的超时,但您可以将此函数分配给 onClick 事件或基本上任何您想要的。
这是我做的例子:
如果您等待几秒钟,您应该会看到滑块 x 将其值更新为 100,我并不担心更新 Ui 的其余部分,但我认为这超出了问题。
希望对您有所帮助!