// JavaScript for letters // vars var letterSpeed = 0.1; // letter moves pixels per milisecond // Triggered when the mouse is moved var cursorX; var cursorY; document.onmousemove = function(e){ cursorX = e.pageX; cursorY = e.pageY; } // Triggered when a key is typed anywhere var deleteMode = false; var autoMode = false; var lastCh = "A"; function keyTyped(e) { var ch = String.fromCharCode(e.keyCode).toUpperCase(); if(!/[^a-zA-Z0-9]/.test(ch) && ch != '') { spawnLetter(ch); lastCh = ch; } else if(ch == " ") rapeButton() else if(e.keyCode == 27) clearButton() else if(e.keyCode == 16) modeButton(); else if(e.keyCode == 17) spawnerButton(); } function mouseMoved() { if(autoMode) spawnLetter(lastCh); } // Letter spawning function spawnLetter(l) { spawnLetterAtPoint(l, cursorX, cursorY); } function spawnLetterAtPoint(l, x, y) { var div = document.createElement("div"); div.onmouseover = function() { if(!deleteMode) letterMouseover(div) else letterDestroy(div); }; div.className = 'letter'; div.innerHTML = l; div.style.left = x + 'px'; div.style.top = (y + 20) + 'px'; document.body.appendChild(div); letterFall(div); $(div).promise().done(function() { $(div).animate({ color: "black", }, 1000); }); return div; } function getPixelMoveDuration(distance) { return Math.round(distance / letterSpeed); } function letterFall(div) { var newPixelY = $(window).height() - $(div).height(); var duration2 = getPixelMoveDuration(newPixelY - cursorY); $(div).stop().animate({ top: newPixelY + "px", }, { duration: duration2, easing: "easeOutBounce" }); } function letterMouseover(div) { var distance = $(div).height() + 50; var distanceHorizontal = (cursorX - ( parseInt($(div).css('left')) + Math.round($(div).width() / 2) ) ) * 3; var duration2 = getPixelMoveDuration(distance); $(div).stop().animate({ top: "-=" + distance + "px", left: "-=" + distanceHorizontal + "px", fontSize: "+=20%", color: "red", }, { duration: duration2, easing: "easeOutBack" }); $(div).promise().done(function() { letterFall(div); $(div).promise().done(function() { $(div).stop().animate({ color: "black", }, 1000); }); }); } function letterDestroy(div) { var newPixelY = -10 - $(div).height(); var duration2 = getPixelMoveDuration(parseInt($(div).css('top')) - newPixelY) / 5; $(div).stop().animate({ top: newPixelY + "px", color: "green", }, duration2); $(div).promise().done(function() { document.body.removeChild(div); }); } function clearButton() { for(i in document.body.getElementsByTagName("*")) { e = document.body.getElementsByTagName("*")[i]; if(e.className == "letter") letterDestroy(e); } } function modeButton() { deleteMode = !deleteMode; if(deleteMode) document.getElementById("modeButton").value = "Turn OFF delete mode (Shift)" else document.getElementById("modeButton").value = "Turn on delete mode (Shift)"; } function spawnerButton() { autoMode = !autoMode; if(autoMode) document.getElementById("spawnerButton").value = "Turn OFF auto drop (Ctrl)" else document.getElementById("spawnerButton").value = "Turn on auto drop (Ctrl)"; } function rapeButton() { div = spawnLetterAtPoint(lastCh, 0, 0); for(var x = $(div).width(); x < $(window).width(); x += $(div).width()) { spawnLetterAtPoint(lastCh, x, 0); } }