【发布时间】:2011-04-06 16:40:17
【问题描述】:
我正在 div 上实现一个悬停工具栏。更常见的是,非悬停(mouseenter 事件)不会触发。
当我将鼠标放在悬停的 div 的 4px 边框上时,我可以可靠地触发它,但是如果我快速移动鼠标并停在 div 的中间,则不会发生任何事情。
这是我的 jquery:
$(".love").hover(function(e){
showLoveActions(e);
},function(e){
hideLoveActions();
});
HTML 如下所示:
<div id="lovespace">
<div class="love" style="width: 192px; height: 192px; position: absolute; left: 320px; top: 0px;">
<span class="loveactions" id="0000000036">
<ul>
<li><a href="#" class="loveaction_love loveaction_grey">♥</a></li>
<li><a href="#" class="loveaction_addimpression">:D</a></li>
<li><a href="#" class="loveaction_addtolist">✚</a></li>
</ul>
</span>
<div class="loveimage" style="background-image:url(DataStorage/loveImages/{D7D4FB9D-5DBC-170A-1841-75FEF988881B}.jpg);width:192px;height:192px;">
<div class="topBar">
<div class="userName" style="color:#B3FFD6">I</div>
<div class="loveHeart" loveid="0000000036">♥</div>
<div class="numbers">
<div class="circleLoves">1</div>
</div>
</div>
<div class="bottomBar">
<div class="loveName">Floating Weeds</div>
</div>
</div>
</div>
.loveactions span 是工具栏,默认设置为 position:absolute, display:none。当我们将鼠标悬停在 .love div 上时,它会调用 showLoveActions(e) 方法,该方法将 span 居中并将显示更改为块状。
我已经排除了 showLoveActions 方法,因为我在替换为警报时遇到了相同的行为。
我怀疑 mouseenter 事件仅由 4px 边框触发,因此如果我将鼠标移动得太快,则不会检测到它。我很困惑为什么 div 的其余部分没有注册该事件。
另一个奇怪的事情是当 mouseenter 触发并且工具栏出现时,hideLoveActions 在鼠标离开 div 时总是被调用。
我应该补充一点,页面上有很多 .love div,它们绝对是通过 jquery masonry 定位的。
.love div 包含在一个 id 为 lovespace 的 div 中 以下是各种元素的 css:
#lovespace div.love
{
display:inline;
z-index:1;
border-color: rgba(204, 70, 70, 1);
border-width: 4px;
margin:12px;
border-style: solid;
-moz-border-radius:6px;
-webkit-border-radius:6px;
-opera-border-radius:6px;
-khtml-border-radius:6px;
border-radius:6px;
-moz-box-shadow: rgba(0,0,0,0.5) 1px 1px 3px;
-webkit-box-shadow:rgba(0,0,0,0.5) 1px 1px 3px;
-opera-box-shadow: rgba(0,0,0,0.5) 1px 1px 3px;
-khtml-box-shadow:rgba(0,0,0,0.5) 1px 1px 3px;
box-shadow: rgba(0,0,0,0.5) 1px 1px 3px;
}
#lovespace div.love div div.topBar
{
background-color: rgba(0,0,0,.5);
color:white;
width:100%;
line-break: 26px;
}
#lovespace div.love div.loveimage
{
position:relative;
}
#lovespace div.love div div.topBar div.userName
{
display: inline-block;
margin-left: 4px;
padding: 4px;
text-shadow: 1px 1px 3px black;
font-weight: bold;
font-size: 22px;
}
#lovespace div.love div div.topBar div.loveHeart
{
text-shadow: 1px 1px 3px black;
color: #cc2424;
font-size:26px;
display: inline-block;
margin-left:2px;
padding:2px;
}
#lovespace div.love div div.topBar div.loveHeart_notLoved
{
color:rgba(170,160,160,1);
text-shadow: 1px 1px 3px black;
}
#lovespace div.love div div.topBar div.numbers
{
float:right;
margin-top:4px;
margin-right:4px;
line-height:26px;
}
#lovespace div.love div div.topBar div.numbers div.circleLoves
{
font-weight: bold;
color: white;
background-color: #2ab239;
display: inline-block;
padding:4px;
padding-top:2px;
padding-bottom: 2px;
-moz-border-radius:6px;
-webkit-border-radius:6px;
-opera-border-radius:6px;
-khtml-border-radius:6px;
border-radius:6px;
font-size:14px;
}
#lovespace div.love div div.bottomBar
{
position: absolute;
background-color: rgba(0,0,0,0.5);
color:white;
bottom: 0px;
left: 0px;
width: 100%;
}
#lovespace div.love div div.bottomBar div.loveName
{
padding:4px;
margin-left:4px;
float:left;
text-shadow: 1px 1px 2px black;
font-weight: bold;
font-size: 22px;
}
【问题讨论】:
-
我无法复制您的问题。你使用的是什么浏览器?查看jsfiddle.net/QYwVG
-
是否有任何鼠标事件处理程序绑定在您的 DIV 的任何祖先?
-
在这个元素之前你有没有可能有额外的浮动,这些浮动没有被正确清除并与盒子模型拧在一起?
-
whouton:我会仔细检查一下。谢谢你的提示。 rockerest:这是一个很棒的工具。刚刚添加了更多上下文。