基本上,当悬停在图像上时,我想稍微移动图像,然后在鼠标移出时,将图像返回到原始位置。我有一个版本的代码可以完成这项任务,但是如果用户将鼠标从图像移动到图像最初所在的区域,则会出现一些“口吃”效果。
-----
| |
----- |img|
| | | |
|img| ==> -----
| | xxxxx
----- xxxxx
在上图中,当鼠标悬停在图像上时,它会向上移动 2 个单位。鼠标移出时,图像返回到原始位置。如下所示,我的代码可以工作,但是当鼠标移动到先前腾出的区域(例如 x)时,代码认为它再次悬停在图像上,然后将图像向上移动 2 个单位。当鼠标悬停在上面由 x 标记的区域时,这会产生一种口吃效果。
我尝试了不同的方法(例如,使用 animate()、添加/删除包装 div、使用 setTimeout() 等),但它们都会产生相同的不良效果。我考虑过不断监控页面上的鼠标位置并记住图像的位置,但这似乎太过分了,尤其是因为可能存在 1 到 n 个图像之间的任何位置。
$(document).ready(function() {
$('.hoverImage').hover(
function(){
$(this).offset({'top':$(this).offset().top-2});
},
function(){
$(this).offset({'top':$(this).offset().top+2});
}
);
});
这是一个 jsfiddle 演示问题:http: //jsfiddle.net/Ut8eK/
任何提示将不胜感激。提前致谢!
更新
惊人的。我最终使用了两个答案:
$(document).ready(function() {
$('.hoverImage').wrap('<div class="hoverImageWrapper" style="display: inline-block;">');
$('.hoverImageWrapper').hover(
function(){
$('.hoverImage',this).offset({'top':$(this).offset().top-10});
},
function(){
$('.hoverImage',this).offset({'top':$(this).offset().top});
}
);
});
这是上面的 jsfiddle:http: //jsfiddle.net/rf5mE/
这非常适合我的需求,因为只需添加class="hoverImage"
到适当的图像,添加功能就非常容易。
我接受@Matyas 作为答案只是因为他的答案首先出现(大约 4 秒!)。
谢谢大家!