javascript - 我无法使用 JS 访问元素的可视位置

标签 javascript layout multiple-columns

我在 UIWebview(webkit 控件)中有一个多列布局,但我在访问元素的“可视”位置时遇到问题。

我将 tapX 移动 4096(4 x 1024,其中 1024 是“分栏页面”的高度),并获得正确的“点击”元素,但我无法判断我是在边缘还是在中间的元素。我需要绝对的顶部和左侧位置,所以我可以使用 (e.left, e.top, width, height) 的矩形在元素顶部动画层效果 - 获得正确的 e.left 和 e.top证明很棘手。

tapElement.offsetTop 忽略列布局并且转换似乎不起作用。

var tapElement  = document.elementFromPoint(tapX, tapY);

if (!tapElement)
    return;   

var realLeft    = window.getComputedStyle(tapElement).getPropertyValue("offsetLeft");
var realTop     = window.getComputedStyle(tapElement).getPropertyValue("offsetTop");

解决方法:

// Figuring out the real top and left positions is difficult
// under the CSS3 multi column layout... But this works :) 

/*
// jQuery method
var realLeft    = $(tapElement).offset().left;
var realTop     = $(tapElement).offset().top;
*/

// DOM method
var box = tapElement.getBoundingClientRect();
var doc = tapElement.ownerDocument;
var docElem = doc.documentElement;
var body = doc.body;
var win = window;
var clientTop = docElem.clientTop || body.clientTop || 0;
var clientLeft = docElem.clientLeft || body.clientLeft || 0;
var scrollTop = win.pageYOffset || docElem.scrollTop || body.scrollTop;
var scrollLeft = win.pageXOffset || docElem.scrollLeft || body.scrollLeft;
var realTop = box.top + scrollTop - clientTop;
var realLeft = box.left + scrollLeft - clientLeft;   

最佳答案

您可以尝试 JQuery 方法“offset”。这是它的文档。 http://api.jquery.com/offset/

如果您不能直接使用 JQuery,检查代码可能有助于解决您的问题。 (为此获取调试版本。)

关于javascript - 我无法使用 JS 访问元素的可视位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8040451/

相关文章:

javascript - 使用javascript在浏览器中解析grep的结果

html - CSS - 带 float 的流体 3 列布局

css - 两列,等高布局 - 列之间的空间

python - 删除 pandas 中值不增加的列

javascript - 如何简化状态相关的 getter,最好是以 SOLID 的方式?

javascript - 尽管打开,但 ShadowRoot 属性为 null

javascript - 自定义过滤器最初有效,但在执行搜索后无效

java - Mig 布局 : bad alignment

r - tidyr 中的 spread() 函数

python - 如何正确分组列?