【发布时间】:2017-08-03 15:37:21
【问题描述】:
我正在尝试将 div 的偏移量动态设置为四个不同的位置;
- 左上角
- 右上角
- 左下
- 右上角
我当前的解决方案依赖于输入元素的 .position() 。然而,在使用 .css() 和 .offset() 之后,我只能设置“左”偏移,而不能设置“顶部”,很奇怪。
var position_picker = function () {
const container = $(".np-container");
const pos = $("#NumberPicker").position();
switch (position) {
case "top-left":
top = pos.top;
left = pos.left;
container.addClass("top-left");
break;
case "top-right":
top = parseInt(container.height());
left = parseInt($("#NumberPicker").width()) - parseInt(container.width()) + pos.left;
container.addClass("top-right");
break;
case "bottom-right":
top = pos.top + parseInt($("#NumberPicker").height());
left = parseInt($("#NumberPicker").width()) - parseInt(container.width()) + pos.left;
container.addClass("bottom-right");
break;
default:
top = pos.top + parseInt($("#NumberPicker").css("height"));
left = pos.left;
container.addClass("bottom-left");
break;
}
$(".np-container").offset({
top: top + parseInt($("#NumberPicker").css("marginTop")),
left: left + parseInt($("#NumberPicker").css("marginLeft"))
})
}
$(".np-container") 是我试图动态定位的元素,而 $("#NumberPicker") 是它的偏移量所依赖的输入。
$(".np-container") 的 CSS 如下
.np-container {
position: absolute;
border: 1px solid #ddd;
display: none;
margin-top: 5px;
border-radius: 3px;
}
.np-container:before {
content: '';
border: 10px solid transparent;
border-bottom-color: #ddd;
position: absolute;
}
.np-container > .np-body {
padding: 5px 3px;
overflow-y: scroll;
}
【问题讨论】:
-
你能把css也给我们吗?
-
@Ivan css 被包括在内,不确定它是否相关 - 除了
position: absolute;。.np-container在输入的焦点上可见。
标签: javascript jquery html css offset