2013-01-12 66 views
0

在我的wordpress主题,我试图实现图像灰度缩放动画鼠标悬停在图像上(博客文章缩略图图像)。我有我的第一个博客帖子图像的问题,这最初是渐隐的,鼠标悬停在第一篇博客文章图片上后,没有着色动画工作,它只保留在灰色状态。之后,每幅图片都会​​以margin-top(大约10-20px)缩小比例。请善意帮助我纠正这些错误。图片灰度为WordPress的博客文章缩略图

我的CSS:

.thumbimage { 
position:relative; 
width:450px; 
height:250px; 
margin:10px 0px 0px 0px; 
position:relative; 
overflow:hidden; 
} 

.thumbimage .inner_shadow{ 
position:absolute; 
top:0px;left:0px;z-index:22; 
background:url(images/transparent-inner-shadow-frame.png) 
} 

.thumbimage img{ 
width:100%; 
position:relative; 
} 

我的WordPress后包含特色图像这是获得WordPress的功能
“the_post_thumbnail()”

我的template.php:

<div class="thumbimage"> 
<div class="inner_shadow"></div> 
<a class="bimage"><?php the_post_thumbnail(); ?></a> 
</div> 

我的jQuery :

<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 


// clone image 
     $('.thumbimage a.bimage img').each(function(){ 
      var el = $(this); 
      el.css({"position":"relative"}).wrap("<div class='thumbimage'>").clone().addClass('img_grayscale').css({"position":"absolute","z-index":"10","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 


     $('.thumbimage').mouseover(function(){ 
     $(this).find('a.bimage img').stop().animate({opacity:1}, 1000); 
      $(this).find('a.bimage img:first').stop().animate({opacity:1}, 1000); 
     }) 
     $('.thumbimage').mouseout(function(){ 
     $(this).find('a.bimage img:first').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> 

回答

0

我解决了它与下面的替换以前的代码:

// clone image 
    $('.thumbimage a.bimage img').each(function(){ 
    var el = $(this); 
    el.clone().addClass('img_grayscale').css({"position":"absolute","z-index":"11","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); 
     }); 

///////////////////////////// ////////////////////////////

2

也许这可以通过CSS3转换来解决。未测试跨浏览器兼容性,在Chrome OSX中运行良好。

img.attachment-thumbnail { 
    -webkit-transition: -webkit-filter .5s ease-in-out; 
    -webkit-filter: grayscale(100%); 
} 
img.attachment-thumbnail:hover { 
    -webkit-filter: grayscale(0%); 
} 

想法从Tut+

跨浏览器发布文章about CSS grayscale

+0

谢谢brasafilo!其实我已经解决了这个问题。 Css3转换需要将鼠标悬停在图像上。但在这里,我的形象是在透明阴影框架后面。 – galexy

+0

@galexy,明白了。希望你会在这里发布你的解决方案;) – brasofilo