我有一个代理人在鼠标悬停和mouseout上等待类缩略图元素
$('body').delegate('.thumbnail', 'mouseover mouseout', function(e){
if(e.type=='mouseover' && !isMousingOver ){
enlarge_thumbnail(this);
isMousingOver = true;
console.log('enlarged')
}else if(e.type=='mouseout'){
reset_thumbnail(this);
isMousingOver = false;
console.log('resetting')
}
})
Run Code Online (Sandbox Code Playgroud)
但每当我在div.thumbnail元素的边界内移动鼠标时,我会在日志中放大重置放大重置放大重置放大重置...
其中enlarge_thumbnail和reset_thumbnail是:
function enlarge_thumbnail(element_to_set, how_much) {
element_to_set = $(element_to_set); // jQueryize the element;
how_much = parseInt(how_much);// Make sure it's an intger;
if( element_to_set.length && !isNaN(how_much) ){
element_to_set.css({width:how_much});
}
}
function reset_thumbnail(element_to_reset) {
element_to_reset = $(element_to_reset); // jQueryize the element;
element_to_reset.css({width:'200px'});
}
Run Code Online (Sandbox Code Playgroud)
如果我不移动鼠标,并且鼠标在div.thumbnail元素的边界内是静止的,那么它就可以实现我想要的:放大缩略图而不是重置它.
可能是什么问题?
这是因为通过设计,mouseover并且mouseout当你进入/离开的后代火处理.thumbnail为好.
为避免这种情况,请使用mouseenter而mouseleave不是.这些事件不会起泡,因此只有在进入/离开.thumbnail它们所绑定的元素时才会触发.