Create A Grayscale Image Hover In HTML5
It used to be that shifting an image from grayscale to colored and vice-versa as you hover over it required 2 copies of the said image — one in grayscale and the other in color. But thanks to Darcy Clarke for the JavaScript & HTML 5 grayscale in this tutorial, this feat is easier and faster because the grayscale image is generated from the original source.
Click on the above image for the demo.
Steps:
- Get a copy of jquery.js
- Paste the code below onto your web page. What the code will do is look for the target images (.item img) and then generate a grayscale version.
<script src=”jquery.min.js” type=”text/javascript”></script>
<script type=”text/javascript”> // On window load. This waits until images have loaded which is essential $(window).load(function(){ // Fade in images so there isn’t a color “pop” document load and then on window load $(“.item img”).fadeIn(500); // clone image $(‘.item img’).each(function(){ var el = $(this); el.css({“position”:”absolute”}).wrap(“<div class=’img_wrapper’ style=’display: inline-block’>”).clone().addClass(‘img_grayscale’).css({“position”:”absolute”,”z-index”:”998″,”opacity”:”0″}).insertBefore(el).queue(function(){ var el = $(this); el.parent().css({“width”:this.width,”height”:this.height}); el.dequeue(); }); this.src = grayscale(this.src); }); // Fade image $(‘.item img’).mouseover(function(){ $(this).parent().find(‘img:first’).stop().animate({opacity:1}, 1000); }) $(‘.img_grayscale’).mouseout(function(){ $(this).stop().animate({opacity:0}, 1000); }); }); // Grayscale w canvas method function grayscale(src){ var canvas = document.createElement(‘canvas’); var ctx = canvas.getContext(’2d’); var imgObj = new Image(); imgObj.src = src; canvas.width = imgObj.width; canvas.height = imgObj.height; ctx.drawImage(imgObj, 0, 0); var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height); for(var y = 0; y < imgPixels.height; y++){ for(var x = 0; x < imgPixels.width; x++){ var i = (y * 4) * imgPixels.width + x * 4; var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3; imgPixels.data[i] = avg; imgPixels.data[i + 1] = avg; imgPixels.data[i + 2] = avg; } } ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height); return canvas.toDataURL(); } </script> |
Be sure to set your target image (eg: .post-img, img, .gallery img, etc.)
TIP: You may change the transition speed by adjusting the highlighted number in the code (ie. 1000 = 1 second)
Provided that JavaScript is enabled, this will work on any browser that supports HTML5 such as Safari, Chrome, and Firefox. Otherwise, the image will revert to its original colored state.
Developer’s Note: if it doesn’t work with Firefox and Chrome locally, you need to put the HTML file on a web server.
No comments
Create A Grayscale Image Hover In HTML5 - Snippets, Templates, API and the best developer content - codemaniac | codeManiac - Snippets, Templates, API and the best developer content
04.21.2012
[...] html5 grayscale image hover [...]
There are no trackbacks to display at this time.