Minimal responsive glitch effect with the codepen logo.
Forked from moklick's Pen Responsive Codepen Glitch.
A Pen by Carlos Espinoza on CodePen.
<canvas id="canvas"></canvas> |
Minimal responsive glitch effect with the codepen logo.
Forked from moklick's Pen Responsive Codepen Glitch.
A Pen by Carlos Espinoza on CodePen.
var canvas = document.getElementById('canvas') | |
, context = canvas.getContext('2d') | |
, img = new Image() | |
, w | |
, h | |
, offset | |
, glitchInterval; | |
img.src = 'http://blog.codepen.io/wp-content/uploads/2012/06/White-Large.png'; | |
img.onload = function() { | |
init(); | |
window.onresize = init; | |
}; | |
var init = function() { | |
clearInterval(glitchInterval); | |
canvas.width = w = window.innerWidth; | |
offset = w * .1; | |
canvas.height = h = ~~(175 * ((w - (offset * 2)) / img.width)); | |
glitchInterval = setInterval(function() { | |
clear(); | |
context.drawImage(img, 0, 110, img.width, 175, offset, 0, w - (offset * 2), h); | |
setTimeout(glitchImg, randInt(250, 1000)); | |
}, 500); | |
}; | |
var clear = function() { | |
context.rect(0, 0, w, h); | |
context.fill(); | |
}; | |
var glitchImg = function() { | |
for (var i = 0; i < randInt(1, 13); i++) { | |
var x = Math.random() * w; | |
var y = Math.random() * h; | |
var spliceWidth = w - x; | |
var spliceHeight = randInt(5, h / 3); | |
context.drawImage(canvas, 0, y, spliceWidth, spliceHeight, x, y, spliceWidth, spliceHeight); | |
context.drawImage(canvas, spliceWidth, y, x, spliceHeight, 0, y, x, spliceHeight); | |
} | |
}; | |
var randInt = function(a, b) { | |
return ~~(Math.random() * (b - a) + a); | |
}; |
*{ | |
margin: 0; | |
padding: 0; | |
} | |
body { | |
background: black; | |
} | |
canvas { | |
margin: 20px auto; | |
display: block; | |
} |