禁用单击直到悬停动画完成

Posted

技术标签:

【中文标题】禁用单击直到悬停动画完成【英文标题】:disable click until hover animation complete 【发布时间】:2011-07-22 00:43:37 【问题描述】:
$('#div1, #div2').click(function()

//Code to execute onclick


    );


$('#div1, #div2').hover(function()

    $(this).animate(
        'filter':'alpha(opacity=100)',
        '-moz-opacity':'1',
        '-khtml-opacity':'1',
        'opacity': '1',
        250,
        function()
    $(this).animate(
            'filter':'alpha(opacity=75)',
            '-moz-opacity':'0.75',
            '-khtml-opacity':'0.75',
            'opacity': '0.75',
            500)
        );
    );

我有两个具有单击事件和悬停事件的 div,并且都有动画。我怎样才能做到这一点,当用户悬停在任一 div 上时:-

- the click event doesnt work until the hover animation is complete
- and then the hover animation doesnt work until the click animation is complete

目前,如果用户单击 div1,然后在单击完成之前将鼠标悬停在 div2 上,则会产生不良影响,例如闪烁和消失

【问题讨论】:

【参考方案1】:

试试

$('#div1, #div2').click(function()

if(('#div1:animated, #div2:animated').length == 0)

//Code to execute onclick


);

一个工作演示 http://jsfiddle.net/RSZYd/

【讨论】:

【参考方案2】:

你可以像这样在悬停事件中调用点击事件:

$('#div1, #div2').hover(function()
    $(this).unbind('click'); //unbind first
    $(this).animate(
        'filter':'alpha(opacity=100)',
        '-moz-opacity':'1',
        '-khtml-opacity':'1',
        'opacity': '1',
        250,
        function()
    $(this).animate(
            'filter':'alpha(opacity=75)',
            '-moz-opacity':'0.75',
            '-khtml-opacity':'0.75',
            'opacity': '0.75',
            500,
            function()
              $(this).click(function()
                 //Code to execute onclick
              );
            )
        );         
    );

【讨论】:

【参考方案3】:

这可能会满足您的要求:

function fxhover($this)

    $this.unbind('click');
    $this.animate(/*somecode*/,100,function() 
        animate(/*somecode*/,100, function()
            $this.bind('click',function()fxclick($this);)     
        
    )

function fxclick($this)

    $this.unbind('hover');
    $this.animate(/*somecode*/,100,function()
        $this.hover(function()
            fxhover($this);
        )
    )

$('#div1, #div2').hover(function()
    fxhover($(this));
)
$('#div1, #div2').click(function()
    fxclick($(this));
)

【讨论】:

以上是关于禁用单击直到悬停动画完成的主要内容,如果未能解决你的问题,请参考以下文章

在动画完成之前禁用链接以避免快速单击破坏幻灯片的菜单

如何使用 if hasClass 条件禁用 jQuery mouseleave 事件? //悬停动画

显示 mdTooltip 直到单击,再次单击时隐藏

单击按钮时暂时禁用悬停(jQuery)

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

拖动禁用 CSS 悬停