Javascript Jquery定位方法

Javascript Jquery定位方法,javascript,jquery,Javascript,Jquery,根据Jquery API文档: .position()返回:对象 说明:获取匹配元素集中第一个元素相对于偏移父元素的当前坐标 此方法不接受任何参数。引用 但我发现在某个地方用这个: $("#position1").position({ my: "center", at: "center", of: "#targetElement" }); 一个对象已被传递到position方法。这不符合API文档吗?上面传递给对象的属性似乎有一些特殊的含义。这些属性说明了什么。它们是做什么的?我是

根据Jquery API文档:

.position()返回:对象

说明:获取匹配元素集中第一个元素相对于偏移父元素的当前坐标

此方法不接受任何参数。引用

但我发现在某个地方用这个:

$("#position1").position({
  my: "center",
  at: "center",
  of: "#targetElement"
});

一个对象已被传递到position方法。这不符合API文档吗?上面传递给对象的属性似乎有一些特殊的含义。这些属性说明了什么。它们是做什么的?我是jquery的完全初学者。所以可能是我错了。

让我们来看看codez!快速浏览jQuery 1.9.1源代码可以发现:

position: function() {
    if ( !this[ 0 ] ) {
        return;
    }

    var offsetParent, offset,
        parentOffset = { top: 0, left: 0 },
        elem = this[ 0 ];

    // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
    if ( jQuery.css( elem, "position" ) === "fixed" ) {
        // we assume that getBoundingClientRect is available when computed position is fixed
        offset = elem.getBoundingClientRect();
    } else {
        // Get *real* offsetParent
        offsetParent = this.offsetParent();

        // Get correct offsets
        offset = this.offset();
        if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
            parentOffset = offsetParent.offset();
        }

        // Add offsetParent borders
        parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
        parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
    }

    // Subtract parent offsets and element margins
    // note: when an element has margin: auto the offsetLeft and marginLeft
    // are the same in Safari causing offset.left to incorrectly be 0
    return {
        top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
        left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
    };
},

未读取参数,未使用参数。无论您在哪里看到该代码,它都不是jQuery核心。很可能是因为原始作者使用了jQuery UI,它扩展了该方法。

请查看-

该功能在jqueryUI位置实用程序中,而不是在核心jQuery中。此变体是的一部分。它为您提供了一种以某种方式相对于另一个元素(或鼠标光标)放置元素的简单方法

您完全正确,原来的
position()
方法不接受参数。。。但是:

该插件扩展了jQuery的内置.position()方法。如果未加载jQuery UI,调用.position()方法可能不会直接失败,因为该方法仍然存在。但是,预期的行为不会发生


根据

  • my:定义要对齐的元素上的哪个位置 使用目标元素
  • at:定义目标元素上要对齐定位元素的位置
  • of:用于元素定位。如果提供选择器,将使用第一个匹配元素。示例:
    “#targetElement”

  • 谢谢你提供的信息。你能帮我简单地理解一下这些物体的属性吗。