使用jquery.offset()设置位置的行为不符合我的预期。我的示例代码尝试在悬停时将div(.slide)与另一个(.active)div重叠。我理解偏移量({top,left}}将元素的位置设置为{top,left}但是每次都按位数递增位置。
作为练习 - 如果我将活动块设置为显示:阻止并删除active.hide()语句,定位将按预期工作。 .hide()似乎导致偏移累积。我非常感谢任何指导。
http://jsfiddle.net/laurencefass/q815mqkm/
$(".slide").mouseenter(function (e) {
$(this).css("background-color", "red");
offset = $(this).offset();
}
更多代码关注链接...
答案 0 :(得分:1)
看到这个小提琴只是编辑了你的代码,任何叠加div都将位于悬停的div之上。我假设你想要的。见updated fiddle。在你的代码中你设置了顶部:1和左:1这对于所有div都不是真的,因为它们都在不同的位置,你需要使用它们的偏移而不是每次使用1和1并且设置偏移是定义为设置元素的坐标(位置)以使其工作元素应该在第一个实例中可见以设置其坐标
active.show(); //show the div first and then set the offset
active.offset({
top: offset.top,
left: offset.left
});
答案 1 :(得分:0)
为什么不使用:
position: relative;
top: 1px;
left: 1px;
这样的事情是你期待的吗?
ul {margin: 0; padding: 0; list-style: none;}
ul li {
width:19%;
margin-left:1%;
min-height: 100px;
float:left;
background-color:orange;
border:5px solid gray;
box-sizing: border-box;
}
ul li:hover {
position: relative;
top: 2px;
left: 2px;
background-color:blue;
border:5px solid gray;
}
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>