从 :hover with .css() 获取 css 值 - jquery

Posted

技术标签:

【中文标题】从 :hover with .css() 获取 css 值 - jquery【英文标题】:Get the css value from :hover with .css() - jquery 【发布时间】:2011-06-10 19:17:35 【问题描述】:

所以我设置了一个具有不同背景的菜单:悬停颜色。按钮背景将是灰色,并且在将按钮 animate() 悬停到其各自的颜色时。

我可以像这样抓住悬停在任何按钮上的原始默认颜色:

var origBackgroundColor = $(this).css('background-color');

但是是否可以从我设置的 css :hover 属性中获取颜色?我将为每个按钮设置 :hover 颜色,因为如果有人没有启用 JS,导航仍然会具有 :hover 效果。

类似这样的东西(或者还有其他方法):

var hoverColor = $(this).css('background-color:hover');

有什么想法吗?这可能吗?

【问题讨论】:

【参考方案1】:

我很确定,为了获得:hover 伪的background-color,它首先需要一个浏览器事件来应用样式。换句话说,我认为你可以在你用鼠标悬停时得到它,但直到那时。

可能你可以等到用户悬停,然后抓取颜色,用默认值覆盖它,存储它以供将来参考,然后制作动画,但这可能比简单地协调你的 JS 和CSS。

类似这样的:http://jsfiddle.net/UXzx2/

    // grab the default color, and create a variable to store the hovered.
var originalColor = $('div').css('background-color');
var hoverColor;

$('div').hover(function() 
      // On hover, if hoverColor hasn't yet been set, grab the color
      //    and override the pseudo color with the originalColor
    if( !hoverColor ) 
        hoverColor = $(this).css('background-color');
        $(this).css('background-color',originalColor);
    
      // Then do your animation
    $(this).animate(backgroundColor:hoverColor);
);

【讨论】:

更新了一个unhover功能来完成效果jsfiddle.net/UXzx2/1 谢谢@generalhenry。我太懒了。 ;o) 这实际上非常聪明,因为您触发悬停而不做任何事情,但存储值然后您对其进行动画处理:] 很好!也谢谢。 您可以只创建几个数组来跟踪所有颜色,例如:jsfiddle.net/UXzx2/9 @Nils R:是的,这是因为当您将鼠标悬停在一个孩子上时,您也将鼠标悬停在其父级上。顺便说一句,这是一个使用.data() 将颜色与特定元素相关联的版本,而不是使用数组。对 $(this).index('li') 的调用需要对每个事件进行 DOM 选择。使用.data(),每个元素只需根据该特定元素查找其存储的值。【参考方案2】:
            // How about writing anonymous function using JQuery, 
            // that encapsulate the originalColor:
            $(function() 
                var originalColor = $('div').css('background-color');
                $('div').hover(
                     function() 
                        $(this).css('background-color','cyan');
                     ,
                     function ()                             
                        $(this).css('background-color', originalColor);
                    
                );
            );             

【讨论】:

【参考方案3】:

jQuery 适用于几乎所有的 CSS 选择器, 因此,在这种情况下,这也应该可以正常工作。 试试下面的代码。

$("li").hover(function()
  var color = $(this).find(".link").css("color");
  console.log(color);
);
a
  color: white;
  background-color: rgb(0, 0, 0);
  font-weight: bold;
  padding: 10px 20px;


a:hover
  color: rgb(255, 165, 0);
 
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
  <li><a href="#" class="link">Sample Link</a></li>
</nav>

$(".targetClassName:hover").css("background-color");`

【讨论】:

以上是关于从 :hover with .css() 获取 css 值 - jquery的主要内容,如果未能解决你的问题,请参考以下文章

测试 CSS :hover with Jasmine

从元素中删除 ':hover' CSS 行为

css里面的hover能不能影响其他id。不使用js时

.CSS-hover 的解释

.svg 中的 <g> 元素不会在 :hover (css) 上按比例放大

JQuery Draggable with hover + custom helper 区别(IE vs Chrome)