2017-01-25 1 views
4

내가 확인할 수있는 방법 페이지의 모든 이미지가로드되었는지, 그들이에서 렌더링 된 그 (JQuery와 또는 바닐라 JS 포함) 그들의 최종, 전체 높이, 그리고 그들의 부모 요소가 그 높이로 조정? 사용자가 페이지에 그들이 스크롤 자신의 위치를 ​​업데이트하는 탐색 메뉴에서 자신의 위치를 ​​강조 위치를 결정 뭔가 -감지하는 방법 모든 이미지가로드 및 요소들은 적절한 높이로 렌더링 할 때

나는 JQuery와를 사용하여 scrollspy 기능을 구현하고있다. 이것이 제대로 작동하려면, 내가 간첩하고 싶은 페이지의 각 섹션의 offset.top을 알아야합니다. offset.top을 너무 일찍 계산하면 모든 이미지가로드되고 전체 높이로 표시되기 전에 offset(). top 계산이 올바르지 않습니다. offset(). top 계산을 너무 많이 실행하지 않도록하고 싶습니다.

상황이 내 요구를 충족하지 않는 시도했다 :

$(document).ready() and $(window).onload() 너무 일찍 모두, 이미지, 따라서 자신의 전체 높이에 렌더링되지 섹션을 만들고, 자신의 전체 높이로 렌더링되지 않았을 수있다.

imagesLoaded 라이브러리. 위의 동일한 문제는 전체 높이로 이미지 렌더링을 고려하지 않습니다.

+0

당신은 $ (window) .on ("load"... ')을 의미한다고 가정합니다. – epascarello

+0

서버에서 페이지를 요청할 때 동적으로로드하거나 모든 컨텐츠가 존재합니까? – epascarello

+0

@epascarello [jQuery .load() event] (https://api.jquery.com/load-event/), 당신이 말하는 것과 상호 교환 가능하다고 생각합니다. 원래 질문을 쓸 때 내 psuedocode를 용서하십시오! – gregnemes

답변

0

내 경험에 비추어 볼 때 사소한 것이 아닌 것 같습니다. window.onload이 도움이 될 수 있지만 이미지가 동적으로로드 될 때 신뢰할 수 없습니다. 과거에는 해킹이 가능하도록 해킹을 사용하고있었습니다. 기본적으로 window.setInterval을 사용하고 있었고 이미지가 실제로 naturalWidth (https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement 참조) 속성을보고 확인할 수 있는지 확인했습니다. https://jsfiddle.net/yu8zr20h/

0

당신은 잘못된 방법으로이 문제를 해결하고 있습니다 : 여기

구현의 예입니다. 사용자 창의 현재 Y 값을 모든 구성 요소의 Y 값 또는 적어도 다른 탐색 값이 포함 된 컨테이너와 비교해야합니다.

상상이 당신의 HTML 코드입니다 :

<div id="firstContainer"> 
    <!-- Some content --> 
</div> 

<div id="secondContainer"> 
    <!-- Some other content --> 
</div> 

지금 당신이 scrollY

를 사용 document.gelElementBtId('element-id').offsetTop

사용자의 현재 높이를 사용하여 전체 HTML 페이지에 높이 상대를 확인하실 수 있습니다

자세한 내용은 JSFiddle입니다.

+0

점검 기능이 호출 될 때마다 offsetTop 값을 다시 계산해야한다는 것을 잊어 버렸습니다. 그래서 체크 기능을 호출 할 때마다 offsetTop 가치는 정확한 순간입니다. – Titulum

+0

답변 해 주셔서 감사합니다!불행히도 성능상의 이유로 함수가 호출 될 때마다 offsetTop 값을 다시 계산해야하는 특정 구현을 피하려고합니다. offsetTop을 계산하면 해당 요소의 페인트가 실행되고 (전체 페이지가 아닌 경우), 스크롤하는 동안 다른 그래픽 집약적 인 작업을 이미 수행하고 있습니다. – gregnemes

+0

나는 그것을 몰랐다! 이것에 대한 더 많은 정보를 가르쳐 주시겠습니까? – Titulum

관련 문제