如何锁定滑块并防止使用鼠标更新值到dat.GUI菜单中。
如何锁定滑块并防止使用鼠标更新值到dat.GUI菜单中。
我试图实现一种方法,以防止使用鼠标更新数值(实际上是在点击按钮后启动的three.js
动画)。
目前,我有以下dat.GUI
菜单:
[图片链接](https://i.stack.imgur.com/5xsI1.png)
一旦点击“开始”按钮,我希望阻止用户使用鼠标修改“旋转x”和“旋转y”参数。
下面是与此菜单相关的代码部分:
// 创建GUI var gui = new dat.GUI({ autoplace: false, width: 350, height: 9 * 32 - 1 }); var params = { GreatCircle : '', Rotationx : torusRotationInitX, Rotationy : torusRotationInitY, StartingVector : '', ComponentVectorTheta : 15.0, ComponentVectorPhi : 15.0, CovariantDerivativeVector : '', ComponentCovariantDerivativeTheta : 15.0, ComponentCovariantDerivativePhi : 15.0 }; // 设置GUI参数 gui.add(params, 'GreatCircle').name('Great Circle '); controllerRotationx = gui.add(params, 'Rotationx', 0, 2*Math.PI, 0.001).name('Rotation x '); controllerRotationy = gui.add(params, 'Rotationy', 0, 2*Math.PI, 0.001).name('Rotation y '); ...
当我点击重置按钮时,我调用以下函数:
// 重置按钮 resetButton.onclick = function ResetParameters() { ... // 重新初始化gui参数 params.Rotationx = torusRotationInitX; params.Rotationy = torusRotationInitY; for (var i in gui.__controllers) { gui.__controllers[i].updateDisplay(); } render(); }
我不知道是否有一个选项可以锁定这些通常改变其值的滑块。这可能吗?
更新1
也许我可以将dat.GUI菜单包装在一个div中,并使这个div不可点击,这是一个解决办法吗?
更新2
我尝试应用Method for disabling a button in dat.gui?上使用的方法。
按照这个解决方案,我添加了扩展到dat.GUI
之后:
dat.controllers.FunctionController = (function (Controller, dom, common) { ... });
添加的代码片段如下:
function blockEvent(event) { event.stopPropagation(); } Object.defineProperty(dat.controllers.FunctionController.prototype, "disabled", { get: function() { return this.domElement.hasAttribute("disabled"); }, set: function(value) { if (value) { this.domElement.setAttribute("disabled", "disabled"); this.domElement.addEventListener("click", blockEvent, true); } else { this.domElement.removeAttribute("disabled"); this.domElement.removeEventListener("click", blockEvent, true); } }, enumerable: true });
扩展代码是否正确放置在dat.GUI
源码中?
然后,我在我的代码中设置了属性“disabled
”,以防止用户在按下开始按钮后用鼠标滑动“controllerRotationx
”:
if (animation) controllerRotationx.__li.disabled = true;
不幸的是,我的方法不起作用:当动画开始时,我仍然可以移动“controllerRotationx
”中的滑块。
我看到上面的链接(Method for disabling a button in dat.gui?),这是关于按钮而不是滑块的,对我的情况有所改变吗?
我没有找到一个明确的控制器来控制滑块。