我知道那里也有一些类似的问题,但是我正在尝试他们的解决方案,但对我来说不起作用。
单击#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