dat.gui is a lightweight controller library for JavaScript. It allows you to easily manipulate variables and fire functions on the fly.
<script type="text/javascript" src="gui.min.js"></script> <script type="text/javascript"> window.onload = function() { var fizzyText = new FizzyText("dat.gui"); var gui = new DAT.GUI(); // Text field gui.add(fizzyText, "message"); // Sliders with min + max gui.add(fizzyText, "maxSize").min(0.5).max(7); gui.add(fizzyText, "growthSpeed").min(0.01).max(1).step(0.05); gui.add(fizzyText, "speed", 0.1, 2, 0.05); // shorthand for min/max/step gui.add(fizzyText, "noiseStrength", 10, 100, 5); // Boolean checkbox gui.add(fizzyText, "displayOutline"); // Fires a function called "explode" gui.add(fizzyText, "explode").name("Explode!"); // Specify a custom name. }; </script>
this.prop
= value
.
gui.add(obj, "propertyName").options(1, 2, 3, 5, 8); // Alternatively, you can specify custom labels using object syntax gui.add(obj, "propertyName").options({'Small': 1, 'Medium': 2, 'Large': 3});
To fire a function whenever a user changes a variable via the GUI, use the following syntax:
gui.add(obj, "propertyName").onChange(function(newValue) { alert("You changed me to " + newValue); });
This can be slightly annoying for types like number or string. You may not want to fire a function while the user is sliding, or while they're typing. To fire a function when the user has finished making changes, use the following:
gui.add(obj, "propertyName").onFinishChange(function(newValue) { alert("You just finished changing me to " + newValue); });
Finally, if you'd like to do a little something extra when a function is called, use the following:
gui.add(obj, "functionName").onFire(function() { alert("You called a function with dat.gui"); });
Let's say you have a variable that changes by itself from time to time.
If you'd like the DAT.GUI to reflect those changes, use the listen()
method.
gui.add(obj, "changingProperty").listen();
By default, dat.gui will create an internal interval
that checks for changes in the values you've marked with
listen()
. If you'd like to check for these changes in an
interval of your own definition, use the following:
gui.autoListen = false; // disables internal interval gui.add(obj, "changingProperty").listen(); // Make your own loop setInterval(function() { gui.listen(); // updates values you've marked with listen() }, 1000 / 60);
Alternatively, you can forego calling listen()
on
individual controllers, and instead choose to monitor changes in
all values controlled by your gui.
gui.autoListen = false; // disables internal interval gui.add(obj, "add"); gui.add(obj, "lotsa"); gui.add(obj, "properties"); // Make your own loop setInterval(function() { gui.listenAll(); // updates ALL values managed by this gui }, 1000 / 60);
You can instantiate multiple DAT.GUI
objects and name them
however you'd like.
var gui1 = new DAT.GUI(); var gui2 = new DAT.GUI(); // The name function overwrites the "Show Controls" text. gui1.name("Utilities"); gui2.name("Camera Placement");
By default, dat.gui panels will be automatically added to the HTML document and fixed to the top of the screen. You can disable this behavior / styling and append the gui DOM element to a container of your choosing.
// Notice this belongs to the DAT.GUI class (uppercase) // and not an instance thereof. DAT.GUI.autoPlace = false; var gui = new DAT.GUI(); // Do some custom styles ... gui.domElement.style.position = "absolute"; gui.domElement.style.top = "20px"; gui.domElement.style.left = "20px"; document.getElementById("my-gui-container").appendChild( gui.domElement );