最近用mouseleave 和mouseenter 做了一个 弹出层隐藏与现实效果,可是出现一个bug,当离开太快“没有执行”。
后来查找原因,通过console.log输出,函数是执行的,而因为程序有了Ajax请求,导致了隐藏比显示先执行。
mouseleave 事件加上setTimeout 问题解决。
$(this).on({
mouseenter:function(){
if (!$('#reject_reason_box').is(":animated")){
var _id = $(this).attr("searchid");
var w = $(window).width();
var h = $(window).height();
var w3 = (w - 300)/2;
var h3 = (h - 200)/2;
$('#reject_reason_box').css({'top':h3+'px', 'left':w3+'px'});
$.ajax({
type:"post",
url:"<?php echo $this->base?>/Wordmanage/reject_reason/",
data:"apply_id="+_id,
success:function(msg){
$('#reject_reason').text(msg);
$('#reject_reason_box').show();
}
});
}
},
mouseleave: function() {
timeOutId = setTimeout(function(){
$('#reject_reason_box').hide();
}, 50);
}
});
之后加上
if (!$('#reject_reason_box').is(":animated")){
优化动画效果,如果该动画在执行的时候,就不在执行动画。