gpt4 book ai didi

javascript - 如何完美重叠两个(相同的)元素?

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:16 26 4
gpt4 key购买 nike

position:relative元素box中,我有

  1. top:0 处的绝对定位元素 parent,带有几个静态 ph1..h6里面。这些可能都有不同的边距/填充值。
  2. 一些绝对定位的元素,其中元素名称和内容与上面列表 #1 中的元素之一完全匹配。

目标是设置第二个元素的 y 值,使其与 1 中的集合中的对应元素完全重叠。

我采用了这种方法(使用闭包,但实际上可以使用任何东西),从元素数组 content 开始生成列表 #1:

goog.dom.removeChildren(parent);
for (var i=0; i<content.length; i++) {
offsets.push(parent.offsetHeight);
goog.dom.appendChild(parent, content[i]);
}
return offsets;

然后,使用来自 offsets 的值:

var matchedElm = source[i].cloneNode(true);
goog.style.setStyle(matchedElm, {"top": offsets[i] + "px"});
goog.dom.appendChild(box, matchedElm);

现在这适用于各种填充和 margin=0,但是当 ph1..6 上的边距不为 0 时失败>。我也尝试过“scrollHeight”,但似乎没有考虑到边距。然后,我尝试直接从列表 #1 中的呈现元素获取 offsetTop,但这似乎产生与上述填充 offsets 过程完全相同的结果。

如何使重叠起作用?我正在寻找原生 javascript 或闭包库解决方案。

最佳答案

您正在寻找的可能是 goog.style.getPageOffset 并且因为您的重叠元素绝对定位在顶部设置中,您可能必须扣除要重叠的元素的上边距使用goog.style.getMarginBox。这是一些示例代码:

<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<div id="game" data-something="hello"></div>
<script type="text/javascript" src="js/goog/base.js"></script>
<script type="text/javascript">
goog.require("goog.dom");
goog.require("goog.style");
</script>
</body>
<div id="contentToOverLap" style="position:absolute;top:30px;left:30px">
<h1 style="margin:10px;padding:2px">h1 10px mar and 2px pad</h1>
</div>
<div id="overlappingContent" style="display:inline">
<h1 style="color:red;margin:15px;padding:2px;position:absolute">
h1 15px mar and 2px pa
</h1>
</div>
<script type="text/javascript">
(function () {
var pH = goog.dom.$("contentToOverLap").children[0];
var cH = goog.dom.$("overlappingContent").children[0];
var box = goog.style.getPageOffset(pH);
console.log("box is:", box);
var mar = goog.style.getMarginBox(cH);
console.log("mar is:", mar);
var t = box.y - mar.top;
var l = box.x - mar.left;
goog.style.setStyle(cH, { "top": t + "px", "left": l + "px" });
})();
</script>
</html>

关于javascript - 如何完美重叠两个(相同的)元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17286537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com