jquery偏移量增加.hide()

时间:2015-09-21 10:56:05

标签: javascript jquery

使用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();
}

更多代码关注链接...

2 个答案:

答案 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>