基本上我在点击一个元素后取消绑定mouseleave
。但我希望此元素的mouseleave
- 事件再次工作当单击另一个元素时。我的代码工作正常,但感觉很笨,因为我在代码中重复播放动画。
除了解除绑定和“重新绑定”之外,没有其他方法可以暂时压缩mouseleave
吗?有什么建议吗?
HTML
<div class="container">
CONTAINER ONE
</div>
<div class="container">
CONTAINER TWO
</div>
JS:
$(document).ready(function()
{
//the default hover-event
$('.container').hover(
function(){
$(this).stop().animate({'padding-bottom':'10px'},{queue:false,duration:160});
},
function() {
$(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
}
);
$('.container').click(function(e) {
e.preventDefault();
// enables the mouseleave for all other `.container`s again.
// also bring the old clicked element into unhovered position again
$('.container')
.bind('mouseleave',function() {
$(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
}).not(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
// supress the mouseleave for the clicked element
$(this).unbind('mouseleave');
})
});
答案 0 :(得分:2)
这可能是更好的方法(example):
$(document).ready(function()
{
var over = function(){
$(this).stop().animate({'padding-bottom':'10px'},{queue:false,duration:160});
};
var out = function() {
$(this).stop().animate({'padding-bottom':'0px'},{queue:false,duration:160});
};
//the default hover-event
$('.container').hover(over, out);
$('.container').click(function(e) {
e.preventDefault();
// enables the mouseleave for all other `.container`s again.
// also bring the old clicked element into unhovered position again
$('.container').bind('mouseleave', out).not(this).each(out);
// supress the mouseleave for the clicked element
$(this).unbind('mouseleave');
})
});