我认为问题在于,当您将鼠标移到触发project-thumbnail
鼠标离开处理程序的加号图标上时,该处理程序隐藏了加号图标,这反过来又触发project-thumbnail
鼠标进入处理程序再次显示加号图标 - 但您的鼠标已经在加号上方这样就会再次触发鼠标离开处理程序,等等等等。当然,口吃是因为动画反复开始和停止。
您也许可以修改您的 html 结构,将加号链接放在project-thumbnail
div 内 - bondythegreat's 已经覆盖了那里。
或者你可以尝试这样的破解:
var projectThumbnail = $('.project-thumbnail'),
imgWidth = projectThumbnail.width(),
imgHeight = projectThumbnail.height(),
timeoutID; // <-- new variable
projectThumbnail.mouseenter(function(e) {
$(this).children('a').children('img').stop().animate({ height: imgHeight, left: '0', top: '0', width: imgWidth}, 100);
$(this).children('a').children('span').stop().fadeIn(200);
$(this).next('.zoom-button').show();
}).mouseleave(function(e) {
// move original functionality into a timeout, saving a reference
// to this for use within the timeout
var $this = $(this);
timeoutID = setTimeout(function() {
$this.children('a').children('img').stop().animate({ height: imgHeight + 33, left: '-20', top: '-20', width: imgWidth + 50}, 100);
$this.children('a').children('span').stop().fadeOut(200);
$this.next('.zoom-button').hide();
}, 5);
});
// cancel the timeout when entering the plus button
$(".zoom-button").mouseenter(function(e) {
clearTimeout(timeoutID);
});
演示:http: //jsfiddle.net/NrtvK/2/
(我知道这很狡猾,但我出于好奇尝试了它,当它起作用时,我想我不妨发布它。)