如何防止 jQuery 悬停事件在未完成时触发?

Posted

技术标签:

【中文标题】如何防止 jQuery 悬停事件在未完成时触发?【英文标题】:How to prevent jQuery hover event from firing when not complete? 【发布时间】:2011-09-24 15:41:32 【问题描述】:

这是我遇到困难的地方:

$('div.sidebar_content_con').hover(function () 
    $(this).children('.sidebar_details_container').slideDown(500, function() 
        $(this).children('.sidebar_details, .sidebar_click').fadeIn(500);   
    );

,function()
    $(this).children('.sidebar_details_container').slideUp(500)
    $('.sidebar_details, .sidebar_click').fadeOut(500);                                                 
);

问题是在 slideDown 和 fadeIn 动画发生时会触发多个悬停事件。理想情况下,应该只触发一个悬停事件,如果用户不再悬停在 div.sidebar_content_con 上,它应该在此处停止动画。

【问题讨论】:

你能分享一些简单的html吗? 【参考方案1】:

添加一些stop()s

$('div.sidebar_content_con').hover(function () 
    $(this).children('.sidebar_details_container').stop(true, true).slideDown(500, function() 
        $(this).children('.sidebar_details, .sidebar_click').stop(true, true).fadeIn(500);   
    );

,function()
    $(this).children('.sidebar_details_container').stop(true, true).slideUp(500)
    $('.sidebar_details, .sidebar_click').stop(true, true).fadeOut(500);                                                 
);

【讨论】:

【参考方案2】:

您可以在事件上使用 stopImmediatePropagation() 以避免它冒泡并触发其他事件

$('div.sidebar_content_con').hover(function (event) 
    event.stopImmediatePropagation();
    $('div.sidebar_content_con').hover(function () 
    $(this).children('.sidebar_details_container').stop(true, true).slideDown(500, function() 

【讨论】:

【参考方案3】:

尝试将 .stop() 添加到函数链 (http://api.jquery.com/stop/):

$('div.sidebar_content_con').hover(function () $(this).children('.sidebar_details_container').stop().slideDown(500, function() $(this).children('.sidebar_details, .sidebar_click').stop().fadeIn(500); ); ,功能() $(this).children('.sidebar_details_container').stop().slideUp(500) $('.sidebar_details, .sidebar_click').stop().fadeOut(500); );

【讨论】:

【参考方案4】:

您需要使用stop() 方法停止事件的传播。

$('div.sidebar_content_con').hover(function () 
    $(this).children('.sidebar_details_container').stop('true, true).slideDown(500, function() 
        $(this).children('.sidebar_details, .sidebar_click').stop('true, true).fadeIn(500);   
    );

,function()
    $(this).children('.sidebar_details_container').stop('true, true).slideUp(500)
    $('.sidebar_details, .sidebar_click').stop('true, true).fadeOut(500);                                                 
);

【讨论】:

以上是关于如何防止 jQuery 悬停事件在未完成时触发?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何animate防止叠加 例如我把鼠标不断移入移出 效果就会不断重复,如何防止呢?

jquery是怎么实现:页面加载完毕,而图片未加载完成时,触发的事件?

jquery是怎么实现:页面加载完毕,而图片未加载完成时,触发的事件?

jQuery悬停变得困惑

jquery-inputmask 事件触发未完成

拖动元素jquery ui时连续触发鼠标悬停事件?