1) Я работаю над приложением dat.GUI, в котором у меня есть 2 ползунка. Я хочу сбросить одно при изменении другого. Например :
var FizzyText = function() {
this.slider1 = 0;
this.slider2 = 0;
};
var gui = new dat.GUI();
var text = new FizzyText();
var slider1 = gui.add(text, 'slider1', 0, 5);
var slider2 = gui.add(text, 'slider2', 0, 5);
slider1.onChange(function(value){
console.log(value);
text.slider2 = 0; // this doesn't work
});
slider2.onChange(function(value){
console.log(value);
text.slider1 = 0; // this doesn't work
});
Это всего лишь пример, но очень важно, чтобы ползунок был сброшен или установлен на значение по умолчанию (в FizzyText).
Пример выше взят из https: //workshop.chromeexperiments .com / examples / gui / # 9 - Updating-the-Display-Automatically, где я не могу автоматически обновлять слайдер.
2) Хочу добавить кнопку сброса, при которой сбрасываются все ползунки. Но с предыдущим ответом я смогу сбросить все значения
2 ответа
Я нашел ответ: gui.__controllers
- это массив контроллеров. Я просто добавил что-то вроде этого:
var FizzyText = function () {
this.slider1 = 0;
this.slider2 = 0;
};
var gui = new dat.GUI();
var text = new FizzyText();
var slider1 = gui.add(text, 'slider1', 0, 5);
var slider2 = gui.add(text, 'slider2', 0, 5);
/* Here is the update */
var resetSliders = function (name) {
for (var i = 0; i < gui.__controllers.length; i++) {
if (!gui.__controllers.property == name)
gui.__controllers[i].setValue(0);
}
};
slider1.onChange(function (value) {
console.log(value);
resetSliders('slider1');
});
slider2.onChange(function (value) {
console.log(value);
resetSliders('slider2');
});
Лучше всего сбросить значения dat.GUI с помощью контроллера .initialValue
вместо его жесткого кодирования, поэтому предпочтительнее использовать следующее: gui.__controllers[i].setValue(gui.__controllers[i]);
Вы можете сбросить все контроллеры графического интерфейса, используя gui.__controllers.forEach(controller => controller.setValue(controller.initialValue));
for (const f in gui.__folders) {gui.__folders[f].__controllers.forEach(c => c.setValue(c.initialValue))}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.