HTML5  - 讨论区

标题:HTML 5联手jQuery实现超酷图像灰度渐变效

2011年03月02日 星期三 15:29

      曾几何时,网站上显示的灰度图像必须手动进行转换。现在使用HTML 5画布,图像可以被巧妙的转换为灰色,而不必使用图像编辑软件。我下面有一个示例,展示如何使用HTML 5和jQuery动态的将彩色图像转换为灰色。贡献者:感谢达西·克拉克(我在Themify的合伙人贡献jQuery和Javascript代码。

      目的

      这个示例的目的是向你展示如何使用HTML5和jQuery创建一个灰度/彩色图像的鼠标悬浮效果。在HTML5出现前,实现这个效果需要两幅图像,彩色的和灰度的版本。现在HTML5让创建这个效果更加容易和高效,因为灰色图像将会直接从原始文件生成。我希望你会发现这个脚本在例如陈列橱或者相片册的设计里相当有用。

      HTML5

      HTML5   HTML5

      jQuery代码

      下面的jQuery代码会找寻目标图像并生成一个灰度的版本。当鼠标悬浮在图像上,代码将会把灰度图像渐变为彩色的。

            
      1. <mce:script src= "jquery.min.js"  mce_src= "jquery.min.js"  type= "text/javascript" ></mce:script>  
      2. <mce:script type= "text/javascript" ><!--  
      3.    
      4.          // On window load. This waits until images have loaded which is essential  
      5.         $(window).load( function (){  
      6.    
      7.                 // Fade in images so there isn't a color "pop" document load and then on window load  
      8.                $( ".item img" ).fadeIn(500);  
      9.    
      10.                 // clone image  
      11.                $( '.item img' ).each( function (){  
      12.                         var  el = $( this );  
      13.                        el.css({ "position" : "absolute" }).wrap( "<div class='img_wrapper' style=" display: inline-block " mce_style=" display: inline-block ">" ).clone().addClass( 'img_grayscale' ).css({ "position" : "absolute" , "z-index" : "998" , "opacity" : "0" }).insertBefore(el).queue( function (){  
      14.                                 var  el = $( this );  
      15.                                el.parent().css({ "width" : this .width, "height" : this .height});  
      16.                                el.dequeue();  
      17.                        });  
      18.                         this .src = grayscale( this .src);  
      19.                });  
      20.    
      21.                 // Fade image  
      22.                $( '.item img' ).mouseover( function (){  
      23.                        $( this ).parent().find( 'img:first' ).stop().animate({opacity:1}, 1000);  
      24.                })  
      25.                $( '.img_grayscale' ).mouseout( function (){  
      26.                        $( this ).stop().animate({opacity:0}, 1000);  
      27.                });  
      28.         });  
      29.    
      30.          // Grayscale w canvas method  
      31.          function  grayscale(src){  
      32.                 var  canvas = document.createElement( 'canvas' );  
      33.                 var  ctx = canvas.getContext( '2d' );  
      34.                 var  imgObj =  new  Image();  
      35.                imgObj.src = src;  
      36.                canvas.width = imgObj.width;  
      37.                canvas.height = imgObj.height;  
      38.                ctx.drawImage(imgObj, 0, 0);  
      39.                 var  imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);  
      40.                 for ( var  y = 0; y < imgPixels.height; y++){  
      41.                         for ( var  x = 0; x < imgPixels.width; x++){  
      42.                                 var  i = (y * 4) * imgPixels.width + x * 4;  
      43.                                 var  avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;  
      44.                                imgPixels.data[i] = avg;  
      45.                                imgPixels.data[i + 1] = avg;  
      46.                                imgPixels.data[i + 2] = avg;  
      47.                        }  
      48.                }  
      49.                ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);  
      50.                 return  canvas.toDataURL();  
      51.     }  
      52.    
      53. // --></mce:script>  

      如何使用

      在你的站点上使用这个效果:

      ◆引用jQuery.js

      ◆粘贴以上的代码

      ◆设置目标图像(例如.post-img, img, .gallery img等等)

      ◆你可以更改动画的速度(例如1000=1秒)

      兼容性

      可以工作在任何支持HTML5和Javascript的浏览器上,例如Chrome、Safari和Firefox。如果浏览器不支持HTML5,这个效果将会退回到原始的彩色图片。注意:如果本地文件在Firefox和Chrome上不工作,你必须要把HTML代码放到一个Web服务器上。

      引用来源

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号