A little optical illusion/quick hacky re-creation of this gif - http://i.imgur.com/mJ7cXhA.gif
A Pen by Tim Holman on CodePen.
| <canvas></canvas> |
| // A quick hacky recreation of this gif - http://i.imgur.com/mJ7cXhA.gif | |
| var canvas, context, plusWidth, totalWidth, totalHeight, totalX, totalY, frame, drawWhite, modifierX, modifierY, frameModifier, bgColor, plusColor; | |
| function prepare() { | |
| canvas = document.getElementsByTagName( 'canvas' )[0]; | |
| context = canvas.getContext( '2d' ); | |
| totalWidth = window.innerWidth; | |
| totalHeight = window.innerHeight; | |
| canvas.width = totalWidth; | |
| canvas.height = totalHeight; | |
| plusWidth = 100; | |
| totalX = Math.ceil( totalWidth / plusWidth ); | |
| totalY = Math.ceil( totalHeight / plusWidth ); | |
| frame = 0; | |
| drawWhite = false; | |
| modifierX = 0; | |
| modifierY = 0; | |
| frameModifier = 1; | |
| plusColor = '#222'; | |
| bgColor = '#f9f9f9'; | |
| } | |
| function swapStyle() { | |
| drawWhite = !drawWhite | |
| // Rotate direction and color | |
| if ( drawWhite ) { | |
| bgColor = '#222'; | |
| plusColor = '#f9f9f9'; | |
| modifierX = -plusWidth * (2 / 3); | |
| modifierY = -plusWidth / 3; | |
| frameModifier = -1; | |
| } else { | |
| bgColor = '#f9f9f9'; | |
| plusColor = '#222'; | |
| modifierX = 0; | |
| modifierY = 0; | |
| frameModifier = 1; | |
| } | |
| } | |
| function render() { | |
| frame += frameModifier; | |
| if ( frame == 95 || frame == -5 ) { | |
| swapStyle(); | |
| } | |
| // Fill background Style | |
| context.fillStyle= bgColor; | |
| context.fillRect( 0, 0, totalWidth, totalHeight ); | |
| context.fillStyle = plusColor; | |
| var i, j; | |
| for( i = -totalY; i < totalX; i++ ) { | |
| var x = i * plusWidth; | |
| for( j = 0; j < (totalY + 11); j++ ) { | |
| x += ( plusWidth / 3 ) | |
| var y = (j * plusWidth - ((i%10) * plusWidth/3)) ; | |
| // Don't draw excess plus's | |
| if ( y < -plusWidth || y > totalHeight + plusWidth || x < -plusWidth) { | |
| continue; | |
| } | |
| drawPlus( x + modifierX, y + modifierY, frame ); | |
| } | |
| } | |
| } | |
| function drawPlus( centerX, centerY, rotate ) { | |
| // Rotate Boundaries | |
| if ( rotate > 90 || rotate < 0 ) { | |
| rotate = 90; | |
| } | |
| var rotateAmount = rotate * Math.PI / 180; | |
| context.translate( centerX, centerY ); | |
| context.rotate( rotateAmount ); | |
| context.fillRect( -plusWidth / 2, -plusWidth / 6, plusWidth, plusWidth/3 ); | |
| context.fillRect( -plusWidth / 6, -plusWidth / 2, plusWidth/3, plusWidth ); | |
| context.rotate( -rotateAmount ); | |
| context.translate( -centerX, -centerY ); | |
| } | |
| window.requestAnimFrame = (function(){ | |
| return window.requestAnimationFrame || | |
| window.webkitRequestAnimationFrame || | |
| window.mozRequestAnimationFrame || | |
| function( callback ){ | |
| window.setTimeout(callback, 1000 / 60); | |
| }; | |
| })(); | |
| // Kick off late | |
| setTimeout( function() { | |
| prepare(); | |
| (function animloop(){ | |
| requestAnimFrame(animloop); | |
| render(); | |
| })(); | |
| }, 1 ); | |
| window.onresize = prepare; |
| html, body { | |
| width: 100%; | |
| height: 100%; | |
| padding: 0px; | |
| margin: 0px; | |
| overflow: hidden; | |
| } |
A little optical illusion/quick hacky re-creation of this gif - http://i.imgur.com/mJ7cXhA.gif
A Pen by Tim Holman on CodePen.