我知道那里也有一些类似的问题,但是我正在尝试他们的解决方案,但对我来说不起作用。

单击#hitbox后,如何停止下面的回调动画?在动画中,当#hitbox悬停在div上时,div将会向外移动,而当鼠标离开#hitbox时,div将会返回其原始位置。我希望div单击#hitbox后保持其向外位置,而不是移回原位。

var timeOut;
$('#hitbox').hover(
            function() {
                 clearTimeout(timeOut);

    // **some animation functions moving divs outward** e.g.:
    $('#div').stop().animate(
    {
   'margin-left': '-500px',
    }, 1000, 'easeOutQuart'
    );

                     } // End first function

    ,

            function() {
                timeOut=setTimeout(function(){

    // **some animation functions moving divs back in** e.g.:
    $('#div').animate(
    {
    'margin-left':'0px',
    }, 900, 'easeOutExpo'  );

                }, 600); //end setTimeout

            } //end second callback function
); //end hover

$('#hitbox').click(function() {
    $('#hitbox').css(
             {'display': 'none',
             });

clearTimeout(timeOut);  // *****NOT WORKING*****


}); // end click


单击#hitbox后,div将向上移动,但是当我希望它们保持在其向外位置时,它们将收缩(向内移动)。

clearTimeout(timeOut);
不像其他一些问题所建议的那样工作。我觉得我还需要更多吗?如您在代码中所见,我还尝试将#hitbox的显示立即设置为none
谢谢你的帮助!

最佳答案

您可以在clicked中添加一个#hitbox类,该类可用于检查是否应执行mouseleave处理程序的内容:

$('#hitbox').click(function() {
    $(this).css({
        'display': 'none',
    });
    $(this).addClass('clicked');
});


hover方法的第二个处理程序如下所示:

function() {

    if($(this).is(":not(.clicked)")){
        timeOut=setTimeout(function(){  // setTimeout method retained instead of using delay()
        // **some animation functions moving divs back in** e.g.:
        $('#div')/*.delay(600)*/.animate({ // delay removed due to issues w/ animation queue buildup
            'margin-left': '0px',
        }, 900, 'easeOutExpo');

       }, 600); //end setTimeout
    } // end  if()

} // end hover

08-08 07:53