【发布时间】:2011-04-07 07:45:22
【问题描述】:
我正在尝试模拟将鼠标悬停在图像上的效果,叠加的半透明图像将从鼠标所在的方向淡入。反之亦然,当您的鼠标离开图像时(淡出 + 移开)
我为此准备了test page。去看看吧,它会弄清楚想要的效果是什么。
我为此定义了一个 HTML 结构:
<div class="overlayLink">
<img src="assets/work/thumbnails/kreatude.jpg" alt="Kreatude" />
<div class="overlayLink_overlay_bg"> </div>
<div class="overlayLink_overlay_fg">
<span class="overlayLink_overlay_link"><a href="#">View Case Study</a></span>
<div class="top"> </div>
<div class="left"> </div>
<div class="right"> </div>
<div class="bottom"> </div>
</div>
</div>
以及下面的 JS(我用的是 jQuery):
jQuery(document).ready(function () {
ourWork();
});
function ourWork(){
var inHandler = function(){
var blue_bg = jQuery(this).find('.overlayLink_overlay_bg');
var divClass = inClass;
blue_bg.stop(true,true).fadeIn();
var ml,mt;
if(divClass == 'left'){
ml = -260;
mt = 0;
}
else if(divClass == 'right'){
ml = 260;
mt = 0;
}
else if(divClass == 'top'){
ml = 0;
mt = -140;
}
else if(divClass == 'bottom'){
ml = 0;
mt = 140;
}
//positioning
jQuery(this).find('a').css({
'marginLeft': ml + 'px',
'marginTop' : mt + 'px'
});
//animation
jQuery(this).find('a').stop(true,true).animate({
"marginLeft": "0px",
"marginTop": "0px"
}, "slow");
}
var outHandler = function(){
var blue_bg = jQuery(this).find('.overlayLink_overlay_bg');
var divClass = outClass;
blue_bg.stop(true,true).fadeOut();
var ml,mt;
if(divClass == 'left'){
ml = -260;
mt = 0;
}
else if(divClass == 'right'){
ml = 260;
mt = 0;
}
else if(divClass == 'top'){
ml = 0;
mt = -140;
}
else if(divClass == 'bottom'){
ml = 0;
mt = 140;
}
//animation
jQuery(this).find('a').stop(true,true).animate({
"marginLeft": ml + "px",
"marginTop": mt + "px"
}, "slow");
}
var inClass, outClass;
jQuery('.overlayLink_overlay_fg div').hover(function(){
inClass = jQuery(this).attr('class');
},function(){
outClass = jQuery(this).attr('class');
});
jQuery('.overlayLink').mouseenter(inHandler).mouseleave(outHandler);
}
解释:
基本上,当我将鼠标悬停在这 4 个 div 之一(.overlayLink_overlay_fg div)上时,我在图像顶部有四个绝对定位的 div 来知道方向(左、上、下、右)我把悬停的类名变量中的 div(var inClass 和 var outclass)
一旦我将鼠标悬停在覆盖图像区域的 div (.overlayLink) 上,我会从 inClass 或 outClass 变量请求方向并执行动画 (inHandler,outHandler)
然而这一切似乎都奏效了,当你快速移动鼠标时它有点小故障,现在我要问问题是什么(导致故障)以及如何解决它使用我当前的代码。
提前致谢
【问题讨论】:
-
您在上面链接到的页面有很多问题 - 这是您的问题吗?如果我从顶部下来,它会起作用。然后在左边它工作。然后,如果我再次从顶部向下走,它会起作用,但再次向左走会使覆盖层向上。然后,如果我从左侧进入,则覆盖层来自顶部。不管我做得多快。
-
你是对的,没有意识到它是如此的小故障。是的,这是我的页面。但是,发生这种情况一定有一些合乎逻辑的原因。如果我查看我的代码,我看不到其中的逻辑错误,这让我很困扰,哈哈。
-
别这样。这对触摸用户不公平。
标签: jquery jquery-animate