DOM 对象的 jQuery xy 文档坐标

IT技术 javascript jquery user-interface location
2021-02-18 06:46:39

我需要获取 DOM 元素的 X、Y 坐标(相对于文档的顶部/左侧)。我找不到任何可以提供这些的插件或 jQuery 属性或方法。我可以获取 DOM 元素的顶部和左侧,但这可以相对于其当前容器/父元素或文档。

3个回答

您可以使用Dimensions插件[已弃用...包含在 jQuery 1.3.2+ 中]

offset()
获取第一个匹配元素相对于文档的当前偏移量,以像素为单位

position()
获取元素相对于其偏移父元素的顶部和左侧位置

知道这一点,那就很容易了...(使用我的小svg 项目作为示例页面

var x = $("#wrapper2").offset().left;
var y = $("#wrapper2").offset().top;

console.log('x: ' + x + ' y: ' + y);

输出:

x: 53 y: 177

希望它有助于你正在寻找的东西。

这是 offset() 和 position() 的图像

使用X 射线

替代文字

使用Web Developer工具栏

替代文字

@balexandre 你认为你能帮我解决这个问题吗:stackoverflow.com/questions/19100184/...
2021-04-27 06:46:39
看起来他们已经解决了较新版本的 jQuery 中的问题。使用 1.3.2 似乎给出了我希望的文档 x,y 坐标。我在 IE7、FF3 和 Safari3 中对此进行了测试,它们似乎都运行正常
2021-05-03 06:46:39
如果您在项目的该页面上运行该代码,您可以验证它不是相对值,而是绝对值。
2021-05-08 06:46:39
请参阅:docs.jquery.com/Plugins/dimensions “已弃用:从 jQuery 1.2.6 开始,维度插件已合并到核心。您可以在 CSS 类别中查看完整文档。” 另外,这只是相对位置
2021-05-15 06:46:39
刚刚又遇到了一个异常。它不考虑您选择的元素的边距。所以为了获得可视元素的视觉 x,y...我需要添加这些。
2021-05-15 06:46:39

我的解决方案是一个带有“解决方法”的插件 :+D 。但有效!

jQuery.fn.getPos = function(){
        var o = this[0];
        var left = 0, top = 0, parentNode = null, offsetParent = null;
        offsetParent = o.offsetParent;
        var original = o;
        var el = o;
        while (el.parentNode != null) {
            el = el.parentNode;
            if (el.offsetParent != null) {
                var considerScroll = true;
                if (window.opera) {
                    if (el == original.parentNode || el.nodeName == "TR") {
                        considerScroll = false;
                    }
                }
                if (considerScroll) {
                    if (el.scrollTop && el.scrollTop > 0) {
                        top -= el.scrollTop;
                    }
                    if (el.scrollLeft && el.scrollLeft > 0) {
                        left -= el.scrollLeft;
                    }
                }
            }            
            if (el == offsetParent) {
                left += o.offsetLeft;
                if (el.clientLeft && el.nodeName != "TABLE") {
                    left += el.clientLeft;
                }
                top += o.offsetTop;
                if (el.clientTop && el.nodeName != "TABLE") {
                    top += el.clientTop;
                }
                o = el;
                if (o.offsetParent == null) {
                    if (o.offsetLeft) {
                        left += o.offsetLeft;
                    }
                    if (o.offsetTop) {
                        top += o.offsetTop;
                    }
                }
                offsetParent = o.offsetParent;
            }
        }
        return {
            left: left,
            top: top
        };
    };

用法:

var p = $("#wrapper2").getPos();
alert("top:"+p.top+"; left:"+p.left);
在您必须编写用户脚本之前,框架都很棒。或者当您想为 jQuery 编写补丁时;仍然有理由了解 javascript。
2021-04-29 06:46:39
你知道有框架只是为了让我们不需要重新编写代码,对吗?
2021-04-30 06:46:39

偏移功能会为你做的。

这是他们给出的例子:

var p = $("p:last");
var offset = p.offset();
p.html( "left: " + offset.left + ", top: " + offset.top );