A very simple example of basic attraction, and some canvas fun. Nothing too extreme. Works with a mouse and on (most?) touch devices.
_="b.stylPm:gQWidV;He8x=Zyz~j~u=[100^00];Mrandom;r=44;q300 z5#150 j#HTJa,b,c,d${v: xJa - c;v: yJb - d;`turn_(r*r)>_x * x$+_y * y)};T=e){Pp`veBDefault|$e=;FX;GY;};Uonmksest:t=T;setIBAval(){skrce-ovA'25/?30E'/?300,0,,l8A';x=z.lengVsave|Ztranslate(F,GvsQ(q/F?Kwcos(q/G?40;x/3{zz=N@(v-NE/7,(w-(E/7,N,(}q++`sto`|x/2{f=j %<0$%=;<0$=L=v/K9=w/K}}x{f=zfL=((F-&9=((G-%&)=;=;} }}^6)[i]'+(255-(7)E',255,'+(7,%,2,2+=fL*5;%+=9*5;UwidVUhe8for_ii!=[0][1];h=(HT(,%,F,G)h${fZglobalCompositeOpAa=' %>$%>$fillM(?;i++)func(move=T;UoBkch,'+p:seIB(5+(uPt:getTkchesrotate(v/36)E',.2)'@=wQdow.QnAStyle='rgba|);=0;if(=MaV..push([,f;Z/i)=PclieB#^^,50]$) %f&)/66?M(7i*28ight9f[3]:ar?)*@Rect(AerBntE)+FuGuJ = K40;L[2]N(Pe.QinUc.VthZa.^,1_ (`rekou|(~=[];tion";for(Y in $="~|k`_^ZVUQPNLKJGFEBA@?:987&%$# ")with(_.split($[Y]))_=join(pop());eval(_)
Xz0iYi5zdHlsUG06Z1EYAhVXaWRWOwMVSGU4HXg9WnkYen5qfnU9WzEwMF4wMF07TRpyYW5kb207cj00NDtxGAQzMDAOIHobNSMEMTUwDiBqGwMjSFRKD2EsYixjLGQke3Y6IHhKYSAtIGM7djogeUpiIC0gZDtgdHVybl8ocipyKT5feCAqIHgkK195ICogeSkXfTtUPQ9lKXtQcGB2ZUJEZWZhdWx0fBkSJGU9EgU7Rh9YO0cfWTt9O1Vvbm1rc2UQEHN0OnQ9VDtzZXRJQkF2YWwoDyl7CHNrcmNlLW92QScWMjURBS8CPzMwRScRBi8DPzMwFDAsMCwCLAMXCGw4QSc7eD16LmxlbmdWHXNhdmV8WnRyYW5zbGF0ZShGLEcXdhpzUShxL0Y/S3caY29zKHEvRz80MBM7BHgvMw57eno9ThNAKHYtTkUCLzcsKHctKAMeRQMvNyxOLCgDHhd9cSsrHWBzdG9gfAR4LzIOe2Y9agEJGSU8MCQlPQM7GRw8MCQcPQIHTD12L0s5PXcvS319BHgOe2Y9egFmTD0oKEYtHCYXOT0oKEctJSYpBwY9DAM7HD0MAjt9CX19XjYpAVtpXRYnKygyNTUtKDcpRScsMjU1LCcrKDcUHCwlLDIsMhccKz1mTCoMNTslKz05Kgw1OwJVd2lkVgNVaGU4BGZvcl9pGGkhPQVbMF0GWzFdBztoPShIVCgcLCUsRixHKRcZaCR7ZghaZ2xvYmFsQ29tcG9zaXRlT3BBYX89JwkZJT4DJCUYGRw+AiQcGAsdZmlsbAxNKD8OO2krKykPZnVuY38oEG1vdmU9VDtVb0JrY2gRLCcrcDpzZUlCKDUrKHUSUHQ6Z2V0VGtjaGVzEx1yb3RhdGUodi8zNikURScsLjIpJ0AVPXdRZG93LlFuQRYLU3R5bGU9J3JnYmF8KTsYPTA7GWlmKBo9TWFWLhsucHVzaChbDAIsDBxmBR07Wh4vaSkfPVBjbGllQiNeXiw1MF0XJCkgJWYGJikvNjY/TSg3aSoyOGlnaHQ5ZlszXTphcj8pKkALUmVjdChBZXJCbnRFKStGdQVHdQZKID0gSzQwO0xbMl1OKAIeUGUuUWluVWMuVnRoWmEuXiwxXyAoYHJla291fCgXfj1bXTt/dGlvbiI7Zm9yKFkgaW4gJD0if358a2BfXlpWVVFQTkxLSkdGRUJBQD86OTg3JiUkIx8eHRwbGhkYFxYVFBMSERAPDgwLCQgHBgUEAwIBIil3aXRoKF8uc3BsaXQoJFtZXSkpXz1qb2luKHBvcCgpKTtldmFsKF8p
Original source not submitted