Сolor-changing light bulbs. Use LMB + drag to lead the direction, wheel to change brightness.
for(_='=uW=0VatU+=Tv.R5E7Q360Pfor(K);JJKy=hH[F(E(G&&0<=:t()*wheel),:15<E(=~~(a.RyRx=M.d[o+function",(e){--;)Ki=l;i,g=):(rW=Array(RbRa0>=R,!1J :30*t()-15ImageDUa(,b=A("mouse&&(==m?(r=e.clientv=p[i], q(e){kTQ*(e.Delta||-e.detailJ1Q>kk=1Q)}M=MUh;trandom;Eabs;Ffloor;wwidth/2Jhheight/2JI=c.creUew,1Jd=I.dUa;A=a.addEventListener;l=5;u=255;k=3E9;L=P*t(JS=XV;Oh+1H+1;yKO[y]w+1x=w+1;xO[y][x]sqrt(x*x+y*yJp=[];p.push({xw,yh,a,b}Jb.style.background="#000";downS=X;X=Y} upT(X-S)/10,T(Y-X)/10} ",q A("DOMMouseScroll",q ~ s(){P<++LLVJvar f=L/P*6,m=F(ffW*(1-f+mnW-f;(m%=6)?1fu0):20un):30fu):4n0u0fn0J>=w||x&&a?=-)-=/30T,0>?V:>w=w>=h||y&&b?=-)-=/30T,0>?V:>h=hH;y{Kx=w;x{D=1;D*=OG-y))]G-x))];YW-D/k;0>YYVJ Y>uYWJo=4*x;(3]=Y)d[o]=r,1]=g,2]=b)}c.putI,w/2,y+h/2)}requestAnimUionFrame(s)}()';g=/[^ -FILMOSX-~]/.exec(_);)with(_.split(g))_=join(shift());Function(_)()
Zm9yKF89Jz11Vz0wVmF0VSs9VHYuUjVFN1EzNjBQZm9yKEspO0pKS3k9aEhbRihFKEcmJjA8PR86dCgpKh53aGVlbB0pLBw6MTU8RSgbPX5+KGEuGlJ5GVJ4GD1NLhdkW28rFmZ1bmN0aW9uFSIsFShlKXsULS07KRNLaT1sO2kTEixnPREpOihyVxEQPUFycmF5KA9SYg5SYQwwPj1SCywhMUoJOjMwKnQoKS0xNQhJbWFnZURVYSgHLGI9BkEoIm1vdXNlBSYmKAQ9PW0/KHI9A2UuY2xpZW50AhJ2PXBbaV0sARUgcShlKXtrVFEqKGUuHURlbHRhfHwtZS5kZXRhaWxKMVE+awRrPTFRKX1NPU1VaDt0F3JhbmRvbTtFF2FicztGF2Zsb29yO3cad2lkdGgvMkpoGmhlaWdodC8ySkk9Yy5jcmVVZQd3LDFKZD1JLmRVYTtBPWEuYWRkRXZlbnRMaXN0ZW5lcjtsPTU7dT0yNTU7az0zRTk7TD1QKnQoSlM9WFY7Tw9oKzFIKzE7eRNLT1t5XQ93KzEceD13KzE7eBNPW3ldW3hdF3NxcnQoeCp4K3kqeUpwPVtdOxJwLnB1c2goe3gedyx5HmgsYQgsYgh9SmIuc3R5bGUuYmFja2dyb3VuZD0iIzAwMCI7BWRvd24UUz0CWDtYPQJZfQkgBXVwFAEMVCgCWC1TKS8xMCwOVCgCWS1YKS8xMH0JBR0iLHEJQSgiRE9NTW91c2VTY3JvbGwiLHEJIH4VIHMoKXtQPCsrTARMVkp2YXIgZj1ML1AqNixtPUYoZhxmVyooMS1mK20cblctZjsobSU9Nik/MQNmEXUGMCk6MgMwEXUGbik6MwMwEWYGdSk6NANuETAGdRAwBmYQbgYwSgEYPj13Hwx8fAt4JiYLYT8MPS0MGwwpBAwtPQwvMzAcGFQMLDA+GD8YVjoYPncEGD13HBk+PWgfDnx8C3kmJgtiPw49LQ4bDikEDi09Di8zMBwZVA4sMD4ZPxlWOhk+aAQZPWhIO3kTe0t4PXc7eBN7RD0xOwFEKj1PRxkteSkpXUcYLXgpKV07WVctRC9rOzA+WQRZVkogWT51BFlXSm89NCp4OygWM109WSkEZFtvXT1yLBYxXT1nLBYyXT1iKX1jLnB1dAdJLHcvMix5K2gvMil9cmVxdWVzdEFuaW1VaW9uRnJhbWUocyl9KCknO2c9L1teIC1GSUxNT1NYLX5dLy5leGVjKF8pOyl3aXRoKF8uc3BsaXQoZykpXz1qb2luKHNoaWZ0KCkpO0Z1bmN0aW9uKF8pKCk=
M = Math
R = M.random
B = M.abs
F = M.floor
w = ~~ (a.width / 2) //canvas width
h = ~~ (a.height / 2) //canvas height
I = c.createImageData(w, 1) //1px line
d = I.data
A = a.addEventListener
l = 5 //blobs array length
T = 255
k = 3e9
H = R() * 360 //hue
J = K = 0 //mouse drag coords
O = Array(h + 1)
for (y = h + 1; y--;) {
O[y] = Array(w + 1)
for (x = w + 1; x--;)
O[y][x] = M.sqrt(x * x + y * y)
}
p = [] //blobs array
for (i = l; i--;)
p.push({
x: R() * w,
y: R() * h,
X: R() * 30 - 15, //vx
Y: R() * 30 - 15 //vy
});
b.style.background = '#000';
A('mousedown', function (e) {
J = e.clientX
K = e.clientY
}, false);
A('mouseup', function (e) {
for (i = l; i--;) {
z = p[i]
z.X += (e.clientX - J) / 10
z.Y += (e.clientY - K) / 10
}
}, false);
A("mousewheel", W, false);
A("DOMMouseScroll", W, false);
function W(e) {
k += (e.wheelDelta || -e.detail) * 5e7
if (k < 15e7) k = 15e7
}
function S() {
var h = (H / 360) * 6,
i = F(h),
q = T * (1 - h + i),
t = T - q,
j = i % 6
if (!j) r = T, g = t, b = 0
else if (j == 1) r = q, g = T, b = 0
else if (j == 2) r = 0, g = T, b = t
else if (j == 3) r = 0, g = q, b = T
else if (j == 4) r = t, g = 0, b = T
else /*(j == 5)*/
r = T, g = 0, b = q
}
~function U() {
if (++H > 360) H = 0;
S();
for (i = l; i--;) {
z = p[i]
if ((z.x >= w && z.X >= 0) || (z.x <= 0 && z.X <= 0)) z.X *= -1;
else if (B(z.X) > 15) z.X -= z.X / 30;
z.x += z.X;
if (z.x < 0) z.x = 0;
else if (z.x > w) z.x = w;
if ((z.y >= h && z.Y >= 0) || (z.y <= 0 && z.Y <= 0)) z.Y *= -1;
else if (B(z.Y) > 15) z.Y -= z.Y / 30;
z.y += z.Y;
if (z.y < 0) z.y = 0;
else if (z.y > h) z.y = h;
}
for (y = h; y--;) {
for (x = w; x--;) {
D = 1; //distance
for (i = l; i--;) {
z = p[i];
D *= O[F(B(z.y - y))][F(B(z.x - x))];
}
P = (T - D / k); //pixel brightness
if (P < 0) P = 0;
if (P > T) P = T;
o = x * 4;
d[o + 3] = P;
if (P) {
d[o] = r;
d[o + 1] = g;
d[o + 2] = b;
}
}
c.putImageData(I, w / 2, y + h / 2);
}
requestAnimationFrame(U);
}()