我是jquery和代码的新手,在这里我试图让setTimeout事件在.mouseout事件中,但我不知道该怎么做,因为我在编辑器中不断出现语法错误。这就是我所拥有的:
jQuery(document).ready(function() { $('.slidedown').hide(); $('.trigger').hover( function(){ // enter animation $('.slidedown').stop(true,true).animate({ height: ['toggle', 'swing'], }, 600, function() { /* animation done */ }); }, function(){ // leave animation $('.slidedown').mouseout() setTimeout( function(){ $('.slidedown').stop(true,true).animate({ height: '0px', }, 600, function() { /* animation done */ }); }, 1000 ); }); });
一个细小的细微差别,在这段代码中,用户将鼠标悬停在一个div上,然后另一个div滑落下来。将鼠标移动到.slidedown div应该保持打开状态,直到删除鼠标为止。但是如果用户在.trigger之后没有将鼠标移过.slidedown而是将鼠标直接从.trigger移动到另一个页面区域,那么此代码是否会折叠.slidedown div?即,我需要某种'setTimeout',只有当用户在悬停在.trigger之后没有将鼠标移动到.slidedown上时才触发。希望我有意义。谢谢你的帮助!
答案 0 :(得分:1)
这一行是问题
$('.slidedown').mouseout()
它应该是
$('.slidedown').mouseout( YOUR_CALLBACK_FUNCTION )
你应该传递一个回调函数,该函数将充当事件处理程序,并且在该事件处理程序中,你可以按照你的方式调用 setTimeout()。
所以正确的代码看起来像这样
$('.slidedown').mouseout( function() {
setTimeout( function(){
$('.slidedown').stop(true,true).animate( {
height: '0px',
},
600,
function() { /* animation done */ }
); // animate ends here
}, 1000 ); // setTimeout ends here
}); // mouseout ends here
答案 1 :(得分:0)
感谢T.J和Arnab,这有效:
$(document).ready(function() { $('.slidedown').hide(); $('.trigger').hover( function(){ // enter animation $('.slidedown').stop(true,true).animate({ height: ['toggle', 'swing'], }, 600, function() { /* animation done */ }); }, function(){ // leave animation $('.slidedown').mouseout( function() { setTimeout( function(){ $('.slidedown').stop(true,true).animate( { height: '0px', }, 600, function() { /* animation done */ } ); // animate ends here }, 1000 ); // setTimeout ends here }); // mouseout ends here }); });
但我提到的另一件事是关于将鼠标移到.trigger上然后离开(但不是.slidedown)不起作用。 .slidedown刚刚开放。 :) :(我认为获得.mouseout事件对于鼠标的一个目的地有一种'允许'规则会非常复杂。