Div 定位计算得很好,但需要解释它是如何工作的
Div Positioning is calculated fine but need explanation how it is working
谁能解释一下这是如何工作的。我正在创建侧面板广告并放置我想要宽度位置的面板。当我在我的服务器上上传脚本时,我会得到一个小脚本,我们将其放置在发布者网站上,我们的脚本在 iframe 中运行。这是屏幕截图。
我的脚本以黄色突出显示,它正在获取 div 在红框中的位置 class='content'.
这是我用过的代码。
function getPosition(element) {
var xPosition = 0;
var yPosition = 0;
var left = 0;
var top = 0;
var i = 0;
while (element) {
xPosition = (element.offsetLeft);
yPosition = (element.offsetTop);
console.log("TOP Pos: "+yPosition+"Left Pos: "+xPosition);
if (i == 1) {
left = xPosition;
top = yPosition;
}
element = element.offsetParent;
i++;
}
return {
x: left,
y: top
};
}
这就是我调用 getPosition 方法的方式
function ReadDivPos(selector) {
var _divPos = "";
var parentDoc = window;
while (parentDoc !== parentDoc.parent) {
parentDoc = parentDoc.parent;
}
parentDoc = parentDoc.document;
var parentDiv = parentDoc.getElementsByTagName('div');
var divs = [];
for (var i = 0; i < parentDiv.length; i++) {
if (parentDiv[i].className == "content") {
var pos = getPosition(parentDiv[i]);
var x = pos["x"];
var y = pos["y"];
console.log("Values+ Top: " + y + " Left: " + x);
var w = parentDiv[i].offsetWidth;
_divPos += x + "," + w + "," + y + "," + (x + w) + ","+window.screen.availWidth+"\n";
}
}
console.log("Values+ x: " + _divPos);
return _divPos;
}
这是我得到的值。
我在第二次尝试中得到了正确的值,即
TOP Pos: 185Left Pos: 197
Top:185 和 Left 197 这是正确的,但为什么我第一次得到 Top 2 和 Left 0,第二次得到正确的值。因为我在第二次尝试中获得了值,所以我已经使用 i==1
修复了这个问题
if (i == 1) {
left = xPosition;
top = yPosition;
}
我认为这不是最好的方法,但这就是我获得正确值的方式。任何人都可以向我解释为什么它在第二次尝试时工作正常。提前致谢
有人给我解释一下吗?谢谢
我敢打赌,这是因为您正在搜索的元素(顺便说一句,getElementsByClassName 是一个东西)相对于包含它的元素定位,因此位置为 0,2 或什么-ev .
那个getPosition函数向上爬父树,所以父节点吐出正确的位置,因为它是相对于文档的。
最后,文档本身是相对于自身的,因此偏移量为零。
谁能解释一下这是如何工作的。我正在创建侧面板广告并放置我想要宽度位置的面板。当我在我的服务器上上传脚本时,我会得到一个小脚本,我们将其放置在发布者网站上,我们的脚本在 iframe 中运行。这是屏幕截图。
我的脚本以黄色突出显示,它正在获取 div 在红框中的位置 class='content'.
这是我用过的代码。
function getPosition(element) {
var xPosition = 0;
var yPosition = 0;
var left = 0;
var top = 0;
var i = 0;
while (element) {
xPosition = (element.offsetLeft);
yPosition = (element.offsetTop);
console.log("TOP Pos: "+yPosition+"Left Pos: "+xPosition);
if (i == 1) {
left = xPosition;
top = yPosition;
}
element = element.offsetParent;
i++;
}
return {
x: left,
y: top
};
}
这就是我调用 getPosition 方法的方式
function ReadDivPos(selector) {
var _divPos = "";
var parentDoc = window;
while (parentDoc !== parentDoc.parent) {
parentDoc = parentDoc.parent;
}
parentDoc = parentDoc.document;
var parentDiv = parentDoc.getElementsByTagName('div');
var divs = [];
for (var i = 0; i < parentDiv.length; i++) {
if (parentDiv[i].className == "content") {
var pos = getPosition(parentDiv[i]);
var x = pos["x"];
var y = pos["y"];
console.log("Values+ Top: " + y + " Left: " + x);
var w = parentDiv[i].offsetWidth;
_divPos += x + "," + w + "," + y + "," + (x + w) + ","+window.screen.availWidth+"\n";
}
}
console.log("Values+ x: " + _divPos);
return _divPos;
}
这是我得到的值。
我在第二次尝试中得到了正确的值,即
TOP Pos: 185Left Pos: 197
Top:185 和 Left 197 这是正确的,但为什么我第一次得到 Top 2 和 Left 0,第二次得到正确的值。因为我在第二次尝试中获得了值,所以我已经使用 i==1
修复了这个问题if (i == 1) {
left = xPosition;
top = yPosition;
}
我认为这不是最好的方法,但这就是我获得正确值的方式。任何人都可以向我解释为什么它在第二次尝试时工作正常。提前致谢
有人给我解释一下吗?谢谢
我敢打赌,这是因为您正在搜索的元素(顺便说一句,getElementsByClassName 是一个东西)相对于包含它的元素定位,因此位置为 0,2 或什么-ev .
那个getPosition函数向上爬父树,所以父节点吐出正确的位置,因为它是相对于文档的。
最后,文档本身是相对于自身的,因此偏移量为零。