Skip to content

Instantly share code, notes, and snippets.

@h1kkan
Created October 23, 2019 19:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save h1kkan/1443db5e991b64ecd78fc97619bc4706 to your computer and use it in GitHub Desktop.
Save h1kkan/1443db5e991b64ecd78fc97619bc4706 to your computer and use it in GitHub Desktop.
Wake up, Neo...reloaded
/*****************************************
WAKE UP, NEO...
Author: Jack Rugile;
MODS by Victor Casals - VSDigital
* Multiple message
* Simulation of human typing
* Cursors
/*****************************************/
var c = document.createElement('canvas');
var ctx = c.getContext('2d');
var cw = c.width = 400;
var ch = c.height = 58;
document.body.appendChild(c);
ctx.font = 'normal 16px monospace';
ctx.textAlign = 'left';
ctx.textBaseline = 'top';
ctx.fillStyle = '#fff';
ctx.strokeStyle = 'rgba(0, 0, 0, .3)';
ctx.shadowColor = '#3f3';
var page=0;
// ... multiple messages... //
var messagesArray= new Array(
"",
"",
"",
"",
"",
"",
"",
"Wake up, Neo...",
"The Matrix has you",
"Follow the white rabbit.",
"Knock, knock, Neo.",
"██████████████████████████████████",
"Original Idea: ",
"modified by VSDigital "
);
// ...cursor style... //
var cursor = new Array(
"",
"█",
"",
"█",
"",
"█",
"",
"█",
"_",
"",
"\n",
"█",
"*Jack Rugile*",
"█"
);
var messageArray = messagesArray[page].split('');
var totalMessages = messagesArray.length-1;
var messageLength = messageArray.length;
var pointer = 0;
var typeTick = 0;
var typeTickMax = 0;
var minTick=5;
var maxTick=10;
var typeResetTick = 0;
var typeResetMax = 15;
var updateTypeTick = function(){
if(pointer < messageLength){
if(typeTick < typeTickMax){
typeTick++;
} else {
typeTick = 0;
pointer++;
typeTickMax= Math.floor((Math.random()*maxTick)+minTick);;
}
} else {
if(typeResetTick < typeResetMax){
typeResetTick++;
} else {
typeResetTick = 0;
typeTick = 0;
pointer = 0;
// ...change message... //
if(page<totalMessages)page++;
else page=0;
messageArray=messagesArray[page].split('');
messageLength = messageArray.length;
}
}
}
var renderMessage = function(){
var text;
switch(cursor[page])
{
case "\n": // ... NO ANIMATION
text= messageArray.slice(0, messageLength);
break;
default:
text= messageArray.slice(0, pointer);
text[pointer]=cursor[page];
break;
}
ctx.shadowBlur = 9;
ctx.fillText(text.join(''), 20, 20);
ctx.shadowBlur = 0;
}
var renderLines = function(){
ctx.beginPath();
for(var i = 0; i < ch/2; i += 1){
ctx.moveTo(0, (i*2) + .5);
ctx.lineTo(cw, (i*2) + .5);
}
ctx.stroke();
}
var loop = function(){
ctx.clearRect(0, 0, cw, ch);
updateTypeTick();
renderMessage();
renderLines();
setTimeout(loop, 2);
}
loop();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
body {
background: #000;
}
canvas {
background: #101010;
box-shadow: 0 0 0 2px #191919;
display: block;
left: 50%;
margin: -100px 0 0 -200px;
position: absolute;
top: 50%;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment