在jQuery中,在鼠标悬停时添加类并在鼠标悬停时将其删除的最佳方法是啥?

Posted

技术标签:

【中文标题】在jQuery中,在鼠标悬停时添加类并在鼠标悬停时将其删除的最佳方法是啥?【英文标题】:In jQuery what's the best way to add a class on mouseover and remove it on mouseout?在jQuery中,在鼠标悬停时添加类并在鼠标悬停时将其删除的最佳方法是什么? 【发布时间】:2012-02-09 03:35:16 【问题描述】:

这个有 jQuery 快捷方式吗?

$(element).on("mouseover", function() 
    $(this).addClass("hover");
).on("mouseout", function() 
    $(this).removeClass("hover");
);

我在 jQuery 文档中看到了一个名为 hover() 的方法,但这似乎与事件 mouseentermouseleave 绑定(我应该使用这些事件而不是 mouseovermouseout 吗?)

【问题讨论】:

【参考方案1】:

说明

您可以使用 jQuery 的 hover() 方法。

查看示例和此jsFiddle Demonstration

样本

$(elem).hover(function(ev) 
    $(this).addClass('hover');
, function(ev) 
    $(this).removeClass('hover');
);

更多信息

jsFiddle Demonstration jQuery.hover()

【讨论】:

有什么理由不使用@lonesomeday 的更紧凑的表单吗? (假设我知道初始状态没有“悬停”类) 是的,你说得对。 lonesomeday's的示例只是切换班级,无论你是否设置了班级初始。 好的。 @lonesomeday 的回答非常巧妙,可能对我有用,但我会选择更安全的路线。 很高兴为您提供帮助!祝你有美好的一天!【参考方案2】:

删除重复代码的最简单方法是将一个参数传递给hover 并使用toggleClass

$(elem).hover(function() 
    $(this).toggleClass('hover');
);

【讨论】:

这肯定总是有效吗? “切换状态”有什么办法不同步吗? 您冒险,因为您不知道初始状态是什么。 @BenLee 仅当您使用其他一些代码进行切换时,这似乎不太可能/愚蠢。 @gdoron,假设我知道初始状态。我只是想确保没有边缘情况(比如光标从“元素上方”到“浏览器窗口外”再到“不超过元素”类型的交易)。 我投票支持这个和 dknaack 的答案——是的,如果您不知道或无法控制您的完整场景,切换状态可能会不同步。但如果你是,它非常光滑。但另一方面,3 行与 5 行......你总是可以选择 dknaack 的安全路线。【参考方案3】:

或者:

$(element).hover(function () 
    $(this).addClass("hover");
, function () 
    $(this).removeClass("hover");
);

【讨论】:

【参考方案4】:

hover() 只是更紧凑一点:

$(elem).hover(function(ev) 
    $(this).addClass('hover');
,function(ev) 
    $(this).removeClass('hover');
);

mouseover/mouseout 和 mouseenter/mouseleave 的区别,见What is the difference between the mouseover and mouseenter events?

【讨论】:

以上是关于在jQuery中,在鼠标悬停时添加类并在鼠标悬停时将其删除的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery轮播滑块仅在悬停时循环并在鼠标离开时停止?

在鼠标悬停时更改背景颜色并在鼠标悬停后将其删除

jQuery 在第二次单击时删除类并在第二次单击时禁用悬停

jQuery:鼠标悬停时淡入图像,鼠标移出时淡出

使用 jQuery 在页面加载时检测鼠标悬停

悬停时jQuery图像闪烁