Text particle
by vovkasolovev
HTML
<canvas id="canvas"></canvas>
<div id="interface">
Message:
<input id="message" type="text" value="podhod" onchange="change()">
Gravity:
<input onchange="changeV()" type="range" id="2" value="0" max="1" min="-1" step="0.1">
Duration:
<input onchange="changeV()" type="range" id="3" value=".4" max="0.99" min="0.1" step="0.01">
Speed:
<input onchange="changeV()" type="range" id="5" value=".1" max="5" min="0" step="0.01">
Radius:
<input onchange="changeV()" type="range" id="6" value="2" max="20" min="1.8" step="0.1">
Resolution:
<input type="range" id="4" value="5" max="20" min="3" step="1" onchange="change()">
</div>
CSS
canvas{
position:absolute;
left:0;
top:0;
}
body {
overflow: hidden;
background: #EDEDED;
margin: 0;
padding: 0;
font-family: arial;
}
p{margin:15px 0px;}
#interface{
width:250px;
position:absolute;
border:0px solid black;
padding:40px;
box-sizing: border-box;
color:#222;
height:100%;
overflow-y:scroll;
background-color: rgba(255, 255, 255, 0.8);
box-shadow: 1px 0px 10px #999;
}
input[type="range"] {
width:100%;
}
input[type=range] {
-webkit-appearance: none;
background-color: silver;
height:10px;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
background-color: #666;
width: 10px;
height: 26px;
}
input[type="button"] {
padding:5px;
margin-bottom:5px;
margin-top:5px;
background-color:#FF2948;
border:0px;
width:100%;
color:white;
font-weight:bold;
font-size:14px;
}
input{
border:0px;
background-color:transparent;
margin-top:20px;
margin-bottom:20px;
}
h1{padding:0px;
margin-top:0px;
}
select {
padding:5px;
margin-bottom:5px;
margin-top:5px;
width:100%;
}a{
color:#FF2948;
font-weight:700;
}
input[type="text"] {
width: 100%;
font-family: sans-serif;
font-size: 30px;
appearance: none;
box-shadow: none;
border-radius: none;
border:0px;
border-bottom:2px solid #FF2948;
text-align:center;
}
::-webkit-scrollbar {
width: 14px;
height: 14px;
}
::-webkit-scrollbar-thumb {
height: 6px;
border: 4px solid rgba(0, 0, 0, 0);
background-clip: padding-box;
-webkit-border-radius: 7px;
background-color: rgba(0, 0, 0, .5);
-webkit-box-shadow: inset -1px -1px 0px rgba(0, 0, 0, 0.05), inset 1px 1px 0px rgba(0, 0, 0, 0.05);
}
::-webkit-scrollbar-button {
width: 0;
height: 0;
display: none;
}
::-webkit-scrollbar-corner {
background-color: transparent;
}
JavaScript
var utils = {
norm: function(value, min, max) {
return (value - min) / (max - min);
},
lerp: function(norm, min, max) {
return (max - min) * norm + min;
},
map: function(value, sourceMin, sourceMax, destMin, destMax) {
return utils.lerp(utils.norm(value, sourceMin, sourceMax), destMin, destMax);
},
clamp: function(value, min, max) {
return Math.min(Math.max(value, Math.min(min, max)), Math.max(min, max));
},
distance: function(p0, p1) {
var dx = p1.x - p0.x,
dy = p1.y - p0.y;
return Math.sqrt(dx * dx + dy * dy);
},
distanceXY: function(x0, y0, x1, y1) {
var dx = x1 - x0,
dy = y1 - y0;
return Math.sqrt(dx * dx + dy * dy);
},
circleCollision: function(c0, c1) {
return utils.distance(c0, c1) <= c0.radius + c1.radius;
},
circlePointCollision: function(x, y, circle) {
return utils.distanceXY(x, y, circle.x, circle.y) < circle.radius;
},
pointInRect: function(x, y, rect) {
return utils.inRange(x, rect.x, rect.x + rect.radius) &&
utils.inRange(y, rect.y, rect.y + rect.radius);
},
inRange: function(value, min, max) {
return value >= Math.min(min, max) && value <= Math.max(min, max);
},
rangeIntersect: function(min0, max0, min1, max1) {
return Math.max(min0, max0) >= Math.min(min1, max1) &&
Math.min(min0, max0) <= Math.max(min1, max1);
},
rectIntersect: function(r0, r1) {
return utils.rangeIntersect(r0.x, r0.x + r0.width, r1.x, r1.x + r1.width) &&
utils.rangeIntersect(r0.y, r0.y + r0.height, r1.y, r1.y + r1.height);
},
degreesToRads: function(degrees) {
return degrees / 180 * Math.PI;
},
radsToDegrees: function(radians) {
return radians * 180 / Math.PI;
},
randomRange: function(min, max) {
return min + Math.random() * (max - min);
},
randomInt: function(min, max) {
return min + Math.random() * (max - min + 1);
},
getmiddle: function(p0, p1) {
var x = p0.x,
x2 = p1.x;
middlex =...