2010-07-02 4 views
2

div $containerposition: relative이고 div가 $foo이고 position: absolute 인 경우를 가정 해 봅시다. 컨테이너에 상대적인 $foo의 위치를 ​​얻고 싶습니다. jQuery를이 쉽게 : 픽셀 단위로 지정 topleft 특성을 가진 개체를 반환jQuery에서 스크롤 가능한 영역 내에서 요소의 절대 위치를 얻으려면 어떻게해야합니까?

$foo.position() 

합니다. 문제는 컨테이너를 아래로 스크롤하거나 오른쪽으로 스크롤하면이 번호가 더 이상 정확하지 않습니다. 특히, 변경해서는 안된다. jQuery는 $foo.offset() - $container.offset() (여기서 offset()은 윈도우 상대 위치를 나타냄)과 동일하고 $container 주위를 스크롤 할 때 $foo.offset()이 변경되도록 position()을 계산합니다.

답변

0

은 상대 부모를 찾기 위해

업데이트 있습니다 .. .scrollLeft()과 그것을 커버해야 $foo

.position()에 의해 반환 된 $container에 값 .scrollTop() 추가 다음을 사용해야합니다.

var $parent = $foo.parents() 
        .filter(
         function(){ 
          var position = $(this).css('position') 
          return position==='relative' || position==='absolute'; 
           } 
         ).eq(0); 
+0

네, 맞습니다. 제 질문이 잘못 표현되었습니다 ... '$ 컨테이너'에 대한 핸들이 없다고 가정 해 봅시다. 그 때 무엇? 즉,'$ .fn.positionInRelativeContainer()'함수를 어떻게 정의하겠습니까? –

+0

@ Trevor, 친숙한 부모를 찾기 위해 코드를 추가했습니다. –

+0

두 가지 이유로 코드가 작동하지 않을 것이라고 생각합니다. 첫째,'|| 위치 === '절대'는 오타입니다. 맞습니까? 두 번째로, 가장 친숙한 부모가 아닌 모든 친척의 부모를 반환합니다. 잠재적으로 여러 개의 중첩 된 스크롤 요소가있는 경우 각각에서 scrollLeft() 및 scrollTop()을 추가하려고한다고 가정합니다. 이는 계산 비용이 많이 든다. 사용자가 스크롤 할 때 실시간으로 계산을 다시하고 싶다면 문제가된다. –

1

$foo.position()을 입력 한 다음 $containerscrollTop()scrollLeft()을 입력하면됩니다.

$foo의 상대 컨테이너가 실제로 무엇인지 알지 못한다면 성가 시게됩니다. 나는 (CoffeeScript에서) 함수를 작성하는 의지했습니다

$.fn.container: -> 
    $parent: @parent() 
    if $parent.css('position') is 'relative' 
    return $parent 
    else 
    return $parent.container() 

내가 내려다있어 더 직접적인 방법이 있나요? 임의의 요소의 컨테이너의 스크롤 바 위치를 직접 찾는 방법?

[업데이트 : 개비의 답변과 의견을 읽은 후, 나는 요소의 모든 부모를 통과하고 해당 요소의 position() 그들의 scrollTop()scrollLeft()을 추가하는 작은 jQuery 플러그인을 요리. 나는 이것을 철저히 시험하지 않았기 때문에 시험해보고 그 효과가 있다면 알려주시기 바랍니다. jqPositionWithScrolling plugin

position()이 자동으로 수행하지 않는다는 다소 이상한 일이 있습니다. 저는 그걸 버그라고 부릅니다.]

+0

당신은 '절대적으로'위치 된 컨테이너도 고려해야합니다 .. 또한 몸체 태그에 도달하면 멈 춥니 다. –

+0

아, 알겠습니다. 나는'position()'이 상대적으로 위치가 정해진 요소뿐만 아니라 절대적으로 배치 된 요소에 상대적이라는 것을 잊어 버렸습니다. (또는 정적 인 것만 제외하고 고정 위치의 것) (http://www.w3schools.com/Css/css_positioning.asp).) –

관련 문제