mirror of
https://github.com/dataarts/dat.gui.git
synced 2024-12-12 04:08:27 +00:00
Starting on sliders. Still some kinks.
This commit is contained in:
parent
6660144ab2
commit
a6aea7d30b
@ -39,15 +39,15 @@ var NumberController = function() {
|
|||||||
|
|
||||||
var slider;
|
var slider;
|
||||||
|
|
||||||
if (min && max) {
|
if (min != undefined && max != undefined) {
|
||||||
slider = new Slider();
|
slider = new Slider(this, min, max, step, this.getValue());
|
||||||
this.domElement.appendChild(slider.domElement);
|
this.domElement.appendChild(slider.domElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
numberField.addEventListener('blur', function(e) {
|
numberField.addEventListener('blur', function(e) {
|
||||||
var val = parseFloat(this.value);
|
var val = parseFloat(this.value);
|
||||||
if (!isNaN(val)) {
|
if (!isNaN(val)) {
|
||||||
updateValue(val);
|
_this.updateValue(val);
|
||||||
} else {
|
} else {
|
||||||
this.value = _this.getValue();
|
this.value = _this.getValue();
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ var NumberController = function() {
|
|||||||
|
|
||||||
numberField.addEventListener('mousewheel', function(e) {
|
numberField.addEventListener('mousewheel', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
updateValue(_this.getValue() + Math.abs(e.wheelDeltaY)/e.wheelDeltaY*step);
|
this.updateValue(_this.getValue() + Math.abs(e.wheelDeltaY)/e.wheelDeltaY*step);
|
||||||
return false;
|
return false;
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
@ -77,7 +77,8 @@ var NumberController = function() {
|
|||||||
clickedNumberField = false;
|
clickedNumberField = false;
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
if(navigator.appVersion.indexOf('chrome') != -1) {
|
// Kinda nast
|
||||||
|
if (navigator.appVersion.indexOf('chrome') != -1) {
|
||||||
document.addEventListener('mouseout', function(e) {
|
document.addEventListener('mouseout', function(e) {
|
||||||
document.removeEventListener('mousemove', dragNumberField, false);
|
document.removeEventListener('mousemove', dragNumberField, false);
|
||||||
}, false);
|
}, false);
|
||||||
@ -97,11 +98,11 @@ var NumberController = function() {
|
|||||||
y = e.pageY;
|
y = e.pageY;
|
||||||
var dy = py - y;
|
var dy = py - y;
|
||||||
var newVal = _this.getValue() + dy*step;
|
var newVal = _this.getValue() + dy*step;
|
||||||
updateValue(newVal);
|
_this.updateValue(newVal);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var updateValue = function(val) {
|
this.updateValue = function(val) {
|
||||||
|
|
||||||
val = parseFloat(val);
|
val = parseFloat(val);
|
||||||
|
|
||||||
|
@ -1,4 +1,16 @@
|
|||||||
var Slider = function() {
|
// TODO: Leaving the window while dragging the slider and then removing the mouse
|
||||||
|
// still leaves slider in focus.
|
||||||
|
// TODO: Problem with multiple sliders.
|
||||||
|
var Slider = function(numberController, min, max, step, initValue) {
|
||||||
|
|
||||||
|
var min = min;
|
||||||
|
var max = max;
|
||||||
|
var step = step;
|
||||||
|
|
||||||
|
var clicked = false;
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
var x, px;
|
||||||
|
|
||||||
this.domElement = document.createElement('div');
|
this.domElement = document.createElement('div');
|
||||||
this.domElement.setAttribute('class', 'guidat-slider-bg');
|
this.domElement.setAttribute('class', 'guidat-slider-bg');
|
||||||
@ -8,4 +20,52 @@ var Slider = function() {
|
|||||||
|
|
||||||
this.domElement.appendChild(this.fg);
|
this.domElement.appendChild(this.fg);
|
||||||
|
|
||||||
|
var map = function(v, i1, i2, o1, o2) {
|
||||||
|
return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));
|
||||||
|
}
|
||||||
|
|
||||||
|
var findPos = function(obj) {
|
||||||
|
var curleft = curtop = 0;
|
||||||
|
if (obj.offsetParent) {
|
||||||
|
do {
|
||||||
|
curleft += obj.offsetLeft;
|
||||||
|
curtop += obj.offsetTop;
|
||||||
|
} while (obj = obj.offsetParent);
|
||||||
|
return [curleft,curtop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.__defineSetter__('value', function(e) {
|
||||||
|
|
||||||
|
var pct = map(e, min, max, 0, 100);
|
||||||
|
this.fg.style.width = pct+"%";
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var onDrag = function(e) {
|
||||||
|
if (!clicked) return;
|
||||||
|
var pos = findPos(_this.domElement);
|
||||||
|
var val = map(e.pageX, pos[0], pos[0] + _this.domElement.offsetWidth, min, max);
|
||||||
|
val = Math.round(val/step)*step;
|
||||||
|
numberController.updateValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.domElement.addEventListener('mousedown', function(e) {
|
||||||
|
clicked = true;
|
||||||
|
x = px = e.pageX;
|
||||||
|
onDrag(e);
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
this.domElement.addEventListener('mouseup', function(e) {
|
||||||
|
clicked = false;
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
document.addEventListener('mousemove', onDrag, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
this.value = initValue;
|
||||||
|
|
||||||
}
|
}
|
32
gui.css
32
gui.css
@ -3,7 +3,7 @@
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
width: 320px;
|
width: 320px;
|
||||||
z-index: 200;
|
z-index: 200;
|
||||||
opacity: 0.95;
|
opacity: 0.97;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 100%;
|
left: 100%;
|
||||||
margin-left: -340px;
|
margin-left: -340px;
|
||||||
@ -65,13 +65,10 @@
|
|||||||
background-color: #222;
|
background-color: #222;
|
||||||
}
|
}
|
||||||
|
|
||||||
.guidat-controller input::selection {
|
|
||||||
background-color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.guidat-controller input:hover {
|
.guidat-controller input:hover {
|
||||||
background-color: #444;
|
background-color: #444;
|
||||||
}
|
}
|
||||||
|
|
||||||
.guidat-controller input:focus {
|
.guidat-controller input:focus {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
}
|
}
|
||||||
@ -87,7 +84,8 @@ background-color: #000;
|
|||||||
.guidat-controller.string input {
|
.guidat-controller.string input {
|
||||||
border: 0;
|
border: 0;
|
||||||
color: #1ed36f;
|
color: #1ed36f;
|
||||||
margin-right: 1px;
|
margin-right: 2px;
|
||||||
|
width: 170px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.guidat-controller.boolean {
|
.guidat-controller.boolean {
|
||||||
@ -100,7 +98,7 @@ background-color: #000;
|
|||||||
|
|
||||||
.guidat-controller.number input[type=text] {
|
.guidat-controller.number input[type=text] {
|
||||||
width: 35px;
|
width: 35px;
|
||||||
margin-left: 10px;
|
margin-left: 5px;
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
color: #00aeff;
|
color: #00aeff;
|
||||||
}
|
}
|
||||||
@ -116,9 +114,9 @@ background-color: #000;
|
|||||||
|
|
||||||
.guidat-controller:last-child {
|
.guidat-controller:last-child {
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
-webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
|
-webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.5);
|
||||||
-moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
|
-moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.5);
|
||||||
box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
|
box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
.guidat-propertyname {
|
.guidat-propertyname {
|
||||||
@ -127,3 +125,17 @@ background-color: #000;
|
|||||||
cursor: default;
|
cursor: default;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.guidat-slider-bg {
|
||||||
|
background-color: #222;
|
||||||
|
cursor: ew-resize;
|
||||||
|
width: 130px;
|
||||||
|
margin-top: 2px;
|
||||||
|
float: right;
|
||||||
|
height: 21px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guidat-slider-fg {
|
||||||
|
background-color: #00aeff;
|
||||||
|
height: 20px;
|
||||||
|
}
|
28
index.html
28
index.html
@ -20,6 +20,7 @@
|
|||||||
{
|
{
|
||||||
numberProperty: 20,
|
numberProperty: 20,
|
||||||
constrainedNum: 0,
|
constrainedNum: 0,
|
||||||
|
notchedNum: 240,
|
||||||
textProperty: "a string",
|
textProperty: "a string",
|
||||||
anotherTextProperty: "another string",
|
anotherTextProperty: "another string",
|
||||||
booleanProperty: false,
|
booleanProperty: false,
|
||||||
@ -41,6 +42,9 @@
|
|||||||
// Creates a slider (min, max)
|
// Creates a slider (min, max)
|
||||||
GUI.add(controllableObject, "constrainedNum", -100, 100)
|
GUI.add(controllableObject, "constrainedNum", -100, 100)
|
||||||
|
|
||||||
|
// Creates a slider with notches
|
||||||
|
GUI.add(controllableObject, "notchedNum", 0, 800, 20)
|
||||||
|
|
||||||
// Creates a text field
|
// Creates a text field
|
||||||
GUI.add(controllableObject, "textProperty");
|
GUI.add(controllableObject, "textProperty");
|
||||||
|
|
||||||
@ -58,13 +62,16 @@
|
|||||||
<pre id="demo-pre" class="prettyprint">
|
<pre id="demo-pre" class="prettyprint">
|
||||||
var controllableObject =
|
var controllableObject =
|
||||||
{
|
{
|
||||||
numberProperty: 20,
|
numberProperty: 20,
|
||||||
constrainedNum: 0,
|
constrainedNum: 0,
|
||||||
textProperty: "a string",
|
notchedNum: 240,
|
||||||
booleanProperty: false,
|
textProperty: "a string",
|
||||||
functionProperty: function() {
|
anotherTextProperty: "another string",
|
||||||
alert("I am a function!");
|
booleanProperty: false,
|
||||||
}
|
anotherBooleanProperty: false,
|
||||||
|
functionProperty: function() {
|
||||||
|
alert("I am a function!");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
@ -75,7 +82,10 @@ window.onload = function() {
|
|||||||
GUI.add(controllableObject, "numberProperty");
|
GUI.add(controllableObject, "numberProperty");
|
||||||
|
|
||||||
// Creates a slider (min, max)
|
// Creates a slider (min, max)
|
||||||
GUI.add(controllableObject, "constrainedNum", -100, 100, 0);
|
GUI.add(controllableObject, "constrainedNum", -100, 100)
|
||||||
|
|
||||||
|
// Creates a slider with notches
|
||||||
|
GUI.add(controllableObject, "notchedNum", 0, 800, 20)
|
||||||
|
|
||||||
// Creates a text field
|
// Creates a text field
|
||||||
GUI.add(controllableObject, "textProperty");
|
GUI.add(controllableObject, "textProperty");
|
||||||
@ -90,7 +100,7 @@ window.onload = function() {
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<footer>
|
<footer>
|
||||||
By <a href="http://georgemichaelbrower.com">George Michael Brower</a>, <a href="">Jono Brandel</a>, and <a href="https://github.com/jonobr1/GUI-DAT">you</a>.
|
By <a href="http://georgemichaelbrower.com">George Michael Brower</a>, <a href="jonobr1.com">Jono Brandel</a>, and <a href="https://github.com/jonobr1/GUI-DAT">you</a>.
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Reference in New Issue
Block a user