将CSS的hover效果转换为jQuery的hover效果

3

我正在构建一个带有悬停效果的网站。请查看http://vitaminjdesign.com/index.html,并查看右下角的服务部分。我使用:hover来更改背景颜色。我想使用jquery来实现优美的淡入淡出效果。以下是我的html代码:

<div class="iconrow">
   <a href="#"><img src="images/icon1.png" border="0" width="35" />
   <h2>Website Design</h2></a>
</div>

基本上,当鼠标滑过.iconrow时,我希望背景从无变为背景颜色:#cccccc;,当鼠标离开时,背景又变回无。

2个回答

4
你需要使用 jQuery 颜色动画插件:http://plugins.jquery.com/project/color
然后像这样编写代码:
$(".iconrow").hover(
    function() {
        $(this).animate( { "background-color": "#ccc" }, normal );
    },
    function() {
        $(this).stop(true, true).animate( { "background-color": "#fff" }, normal );
    }
);

编辑:

根据dcneiner的评论,如果您希望最终颜色为无色,则必须添加回调函数来在动画完成后将颜色更改为“无色”。我猜测将颜色动画化为“无色”是未定义的。您可以将#fff更改为接近背景的颜色,以帮助平滑最终过渡。

animate函数的签名为:

animate(params, [duration], [easing], [callback])

1
jQuery UI 还允许您动画化背景颜色。 - carillonator
@Joel,原帖作者想要从“none”或完全透明变成一种颜色。这种类型的动画对他没有帮助。此外,您需要引用“background-color”或使用“backgroundColor”。您当前的代码是无效的JS。 - Doug Neiner
@dcneiner:谢谢。至于“none”,你可以通过回调函数来实现相似的功能。 - Joel
是的,这样做不行。感谢您的评论。 - JCHASE11
它不会这样做,因为背景是透明的PNG格式,没有任何颜色可以完全匹配它。 - JCHASE11

0

注意:我通过Firebug构建和测试了我的解决方案,以使其在您提供的链接上正常工作。如果按顺序执行这些步骤,您应该可以完全运行它。

除了支持RGBA背景颜色的Safari和Firefox 3.5等其他浏览器之外,您将无法从transparent动画到颜色。如果您正在寻找跨浏览器支持,则可以像这样解决问题:

1. 将默认的悬停效果限定在非JS类中,以便:hover效果可以作为后备方案。一个很好的方法是:

<html class="no-js">
   <head>
     .... meta, title, link tags ...
     <script type="text/javascript">document.documentElement.className = "js";</script>
     .... other scripts ...
   </head>

这会在页面显示之前将 no-js 更改为 js

2. 使用 jQuery 在您的 a 标签旁添加虚拟元素(js 添加虚拟元素的步骤在第3步)

以下是要使用的 CSS:

.js .iconrow { background: none !important } /* Hide current hover effect */

.iconfader {
  position: absolute;
  display: block;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  background-color: #ccc;
  z-index: 5;
}

.iconrow { position: relative } /* Spans are absolute, need the parent to be relative */
.iconrow a { position: relative; z-index: 10} /* Needs to sit on top */

3. 当鼠标移入和移出时,淡入淡出新的虚拟元素

$('.iconrow').each(function(){
   var $span = $("<span class='iconfader'></span>").css('opacity',0.0).appendTo(this);
   $(this).hover(function(){
       $span.stop().animate({opacity: 0.8}, 200);
   }, function(){
       $span.stop().animate({opacity: 0.0}, 200);
   });
});

最后,如果您决定使用图像背景而不是纯色,请小心。IE7和IE8无法更改24位PNG文件的不透明度。这会完全破坏透明度。


这似乎也不行。我正在寻找一个非常简单的悬停效果。当你将鼠标悬停在一个 div 上时,该 div 的背景颜色从一种颜色变为另一种颜色。它会以简单的淡入淡出方式进行变化。有其他的方法吗? - JCHASE11
@JCase11,你不是在从一种颜色变成另一种颜色,而是从“无颜色”变成有颜色。这需要颜色的 alpha 透明度,只有少数浏览器支持。我不确定为什么没有成功,因为我已经测试过并且认为我得到了你想要的效果。让我发一些代码,给我五分钟。 - Doug Neiner
@JChase11,这两个页面中的一个是否满足您的需求?http://pixelgraphics.s3.amazonaws.com/stackoverflow/1851141/vjd1.html 或者 http://pixelgraphics.s3.amazonaws.com/stackoverflow/1851141/vjd2.html。我猜想第二个链接是您需要的。请解释一下您要的内容与现有页面的区别,以便我们提供更好的帮助。此外,您的`scripts.js`文件正在调用`mc.init()`,这会导致错误并停止该页面上的代码块运行。 - Doug Neiner
@JChase11 顺便说一下,你的设计进展得很不错。它看起来真的很棒! - Doug Neiner
第二个非常准确!!我非常感谢你的赞美和帮助。 - JCHASE11
就PNG图形而言,我已经使用了一些解决方案使它们在IE中工作,但我知道这不是最好的方法。我将问另一个问题,看看最佳实践是什么。谢谢! - JCHASE11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接