function myclick() {
let node = document.createElement("div");
node.className = "popover";
node.innerText = "hello world hello world";
event.srcElement.appendChild(node);
}
.container {
width: 230px;
height: 200px;
border: 1px solid #ddd;
display: flex;
flex-flow: wrap;
}
.tag {
border: 1px solid #ddd;
padding: 5px;
margin: 5px;
display: flex;
height: 20px;
position: relative;
}
.popover {
position: absolute;
top: 30px;
width: 60px;
left: 0px;
background-color: #dfdfdf;
}
<div class="container">
<div class="tag" onclick="myclick();">apple</div>
<div class="tag" onclick="myclick();">banana</div>
<div class="tag" onclick="myclick();">carrot</div>
<div class="tag" onclick="myclick();">dog</div>
<div class="tag" onclick="myclick();">elephant</div>
<div class="tag" onclick="myclick();">firetruck</div>
</div>
我已经完全重现了我面临的上述问题。基本上,当您单击标签时,我会从标签中显示弹出窗口。这一切都完美无缺,除非标签靠近其容器的边缘。在这种情况下,标签会从容器中剪出。在提供的示例中,如果您单击“dog”,则弹出窗口将剪辑在 container
div 之外。
相反,我希望弹出窗口尽可能向左移动,以防止其自身从容器中剪出。我已经弄乱了一段时间,但我不太清楚如何完成它。
最佳答案
你可以试试这个。我添加了一个名为 onEdge
的 javascript 函数,用于检测子元素与边缘的距离。这可能需要根据您的需要进行修改(例如设置与您认为“太近”的 parent 边缘的距离)。
function onEdge(child) {
if (child.parentElement.offsetWidth < (child.offsetLeft + child.offsetWidth))
return true;
return false;
}
function myclick(elm) {
var addClass = onEdge(elm);
let node = document.createElement("div");
node.className = "popover" + (addClass ? " right" : "");
node.innerText = "hello world hello world";
event.srcElement.appendChild(node);
}
.container {
width: 230px;
height: 200px;
border: 1px solid #ddd;
display: flex;
flex-flow: wrap;
}
.tag {
border: 1px solid #ddd;
padding: 5px;
margin: 5px;
display: flex;
height: 20px;
position: relative;
}
.popover {
position: absolute;
top: 30px;
width: 60px;
left: 0px;
background-color: #dfdfdf;
}
.popover.right {
left: auto;
right: 0;
}
<div id="tag-container" class="container">
<div class="tag" onclick="myclick(this);">apple</div>
<div class="tag" onclick="myclick(this);">banana</div>
<div class="tag" onclick="myclick(this);">carrot</div>
<div class="tag" onclick="myclick(this);">dog</div>
<div class="tag" onclick="myclick(this);">elephant</div>
<div class="tag" onclick="myclick(this);">firetruck</div>
</div>
关于javascript - 如何防止绝对定位的弹出窗口从其容器中剪出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63726744/