【问题标题】:I can't access the visual location of an element with JS我无法使用 JS 访问元素的可视位置
【发布时间】:2011-11-07 17:49:05
【问题描述】:

我在 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;   

【问题讨论】:

  • 我的情况非常相似。在大多数情况下,它似乎真的很好用,但是,当一个段落从一列开始并在另一列结束时,这个方法返回 0。你对如何解决这个问题有什么想法吗?
  • 我只用 div 而不是段落尝试了上述方法。包含 div 是否有大小和宽度限制?尝试逐步执行上述 OR 语句。

标签: javascript layout multiple-columns


【解决方案1】:

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

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

【讨论】:

  • 我想指出,当元素跨越多列时,使用JQuery.offset() 方法似乎返回无效的偏移值,同时使用 CSS3 多列布局,至少在 iOS (UIWebView) 上是这样。其他人发布了同样的问题,这里是 link 我在此处发布的可能解决方案。
  • 我也在确认这一点。我最终改用 element.offsetTop,即使对于跨多列的 div/段落,它也能给出正确的值。
猜你喜欢
  • 2021-12-30
  • 2021-06-28
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2015-07-04
相关资源
最近更新 更多