-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRandomNumberViz.html
More file actions
144 lines (134 loc) · 4.2 KB
/
RandomNumberViz.html
File metadata and controls
144 lines (134 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Random Number Visualizer</title>
<style type='text/css'>
canvas {
border: 1px solid black;
margin-top: 20px;
margin-left: 10px;
}
.snippet td, .snippet input {
font: 24pt Consolas, Courier New, monospace;
text-align: center;
}
pre.snippet {
font: 20pt Consolas, Courier New, monospace;
}
.labels td, input.color {
font: 12pt Calibri, Arial, sans-serif;
text-align: center;
}
td.top {
vertical-align: top;
}
td span.k { color: rgb(0,0,240); }
.sliders input[type='range'] {
width: 80px;
}
</style>
</head>
<body>
<p>Change the numbers or sliders and see what happens!</p>
<table>
<tr class=labels>
<td>
<td>origin
<td>
<td>quantity
<td>
</tr>
<tr class=snippet>
<td>
<td><input size=4 id='origin' value='50'>
<td> + (<span class=k>int</span>)(
<td><input size=5 id='qty' value='300'>
<td>*Math.random() );
</tr>
<tr class=sliders>
<td>
<td><input type="range" value="50" id="originSlide" min="0" max="200" step="1">
<td>
<td><input type="range" value="300" id="qtySlide" min="1" max="1000" step="1">
<td>
</tr>
</table>
<pre class=snippet>
// Simplifies to one value randomly chosen from <span id='low1'>50</span> to <span id='high1'>349</span>
// There are <span id='qty2'>300</span> possible values
// The smallest possible value is <span id='low2'>50</span>.
// The largest possible value is <span id='high2'>349</span>.
// Here are some samples: <button type='button' onclick="redoSamples(); return false;">Redo Samples</button>
// <span id='samples'>327 266 190 289 67 275 239</span>
</pre>
<script type='text/javascript'>
"use strict";
var origin, qty, lo, hi, prevOrigin = -999, prevQty = -999;
var slidingOrigin = false;
var slidingQty = false;
var samples = [ 327, 266, 190, 289, 67, 275, 239 ];
function update() {
if ( slidingOrigin ) {
document.getElementById('origin').value = document.getElementById('originSlide').value;
}
else {
document.getElementById('originSlide').value = document.getElementById('origin').value;
}
if ( slidingQty ) {
document.getElementById('qty').value = document.getElementById('qtySlide').value;
}
else {
document.getElementById('qtySlide').value = document.getElementById('qty').value;
}
origin = s2i( document.getElementById('origin').value );
qty = s2i( document.getElementById('qty').value );
lo = origin;
hi = (qty-1)+lo;
document.getElementById('low1').textContent = lo;
document.getElementById('low2').textContent = lo;
document.getElementById('high1').textContent = hi;
document.getElementById('high2').textContent = hi;
document.getElementById('qty2').textContent = qty;
if ( qty != prevQty || origin != prevOrigin ) {
redoSamples();
prevOrigin = origin;
prevQty = qty;
}
}
function s2i( s ) {
var n = 0;
if ( s.length > 0 ) {
var test = parseInt(s, 10);
if ( ! isNaN(test) )
n = test;
}
return n;
}
function redoSamples() {
for ( var i=0; i<samples.length; i++ ) {
samples[i] = origin + Math.floor( Math.random()*qty );
}
document.getElementById('samples').textContent = samples.join("\t");
}
function draggOrigin() { slidingOrigin = true; }
function donedraggOrigin() {
slidingOrigin = false;
document.getElementById('origin').value = document.getElementById('originSlide').value;
}
function draggQty() { slidingQty = true; }
function donedraggQty() {
slidingQty = false;
document.getElementById('qty').value = document.getElementById('qtySlide').value;
}
function main() {
document.getElementById('originSlide').addEventListener('input', draggOrigin);
document.getElementById('originSlide').addEventListener('change', donedraggOrigin);
document.getElementById('qtySlide').addEventListener('input', draggQty);
document.getElementById('qtySlide').addEventListener('change', donedraggQty);
setInterval(function() { update(); }, 1000/60);
}
main();
</script>
</body>
</html>