通过 jQuery/Javascript 添加悬停 CSS 属性

Posted

技术标签:

【中文标题】通过 jQuery/Javascript 添加悬停 CSS 属性【英文标题】:Adding hover CSS attributes via jQuery/Javascript 【发布时间】:2012-11-22 07:53:11 【问题描述】:

某些 CSS 样式需要在悬停时应用到元素,并且必须使用 javascript/jquery 直接应用 CSS 样式,而不是通过样式表或 $(this).addClass('someStyle'),因为我将 DOM 元素注入另一个页面。

我们可以使用常用的css样式

$('#some-content').css(
    marginTop: '60px',
    display: 'inline-block'
);

我们应该如何为:hover事件添加CSS样式?


我们必须求助于:

$('#some-content').hover(
       function() $(this).css('display', 'block') ,
       function() $(this).css('display', 'none') 
)

【问题讨论】:

查看 jquery 中的.hover() 方法。 api.jquery.com/hover 为什么不根据jquery中的hover事件或者onmouseover和onmouseout来添加和移除一个类呢? 您希望元素在您将鼠标悬停离开时消失?你应该如何再次将鼠标悬停在它上面? @Alnitak 好点,我随机选择了display 属性,可能不是一个很好的例子:) 只是为了澄清。如果我理解原始问题不是如何在悬停/hout 上触发 jQuery 事件,而是如何使用特定 CSS 属性等装饰元素的悬停样式。但是这是不可能的,请参阅这里有更多细节:(jQuery Bug 跟踪器:访问:通过 JQUERY 悬停元素的 CSS 属性:bugs.jquery.com/ticket/4434)。因此,应使用提供的其他答案中的解决方法。 【参考方案1】:

我发现使用 mouseenter 和 mouseleave 比悬停更好。有更多的控制权。

$("#somecontent").mouseenter(function() 
    $(this).css("background", "#F00").css("border-radius", "3px");
).mouseleave(function() 
     $(this).css("background", "00F").css("border-radius", "0px");
);

【讨论】:

想详细说明“还有更多控制权”声明吗?据我所知,.hover() 函数只是精确执行您编写的代码的简写。 我只是喜欢它明确地说“鼠标进入元素”和“鼠标离开元素”。但是,此页面上的图表表明实时 mouseenter/mouseleave 在优化方面是最好的。 jsperf.com/hover-vs-mouseenter @Jon 很好的答案,非常有用,谢谢。一件快速的事情,您忘记了 mouseleave 函数的十六进制颜色代码上的“#”哈希符号,这是该代码工作所必需的。【参考方案2】:

试试这个:

$('#some-content').hover(function()
    $(this).css( marginTop: '60px', display: 'inline-block' );
, function()
    $(this).css( //other stuff );
);

或使用类

$('#some-content').hover(function()
    $(this).toggleClass('newClass');
);

更多信息在这里.hover()和.toggleClass()

【讨论】:

【参考方案3】:

您应该将它们放在hover 事件中:

var elem = $('#elem');

elem.hover(function () 
    // ... :hover, set styles
, function () 
    // ... this function is called when the mouse leaves the item, set back the
    //     normal styles
);

但是,我完全建议将你的 CSS 放在类中并在 JS 中使用这些类,你应该尽可能多地拆分语言。

【讨论】:

【参考方案4】:
$("#someObj").hover(function()
    $(this).css(...);
:);

http://api.jquery.com/hover/

【讨论】:

这会在您将鼠标移开后导致 css 卡住。

以上是关于通过 jQuery/Javascript 添加悬停 CSS 属性的主要内容,如果未能解决你的问题,请参考以下文章

通过 ACF 在悬停时添加和删除默认和悬停背景图像

仅当通过 jQuery 悬停(而不是悬停的行)时,如何向每个表行添加属性?

选择 A 单选按钮以在 jquery/javascript 中添加另一个输入

通过数组过滤以匹配文本(jQuery / Javascript)

如何在导航上添加悬停过渡效果?

获取 MouseLeave 事件后鼠标悬停的第一个元素