2015-01-09 5 views
0

이 질문은 모두 stackoverflow에 관한 것이고 여기서도 내 솔루션을 가지고 있습니다. 그러나 여전히 작은 문제가 있습니다.고정 된 머리글로 앵커를 클릭하면 오프셋 설정

작은 하위 메뉴가 상단에 고정되어 있으므로 앵커 링크를 클릭하면 하위 메뉴 다음에 앵커가 표시됩니다. 내 코드

첫째, 대부분의 경우에 작동합니다

function offsetSubmenu() { 
    if(location.hash.length !== 0) { 
     window.scrollTo(window.scrollX, window.scrollY - submenuHeight); 
    } 
} 
$(window).on("hashchange", function() { 
    offsetSubmenu(); 
}); 
window.setTimeout(function() { 
    offsetSubmenu(); 
}, 1); 

당신은 코드 페이지가로드 될 때 한 번만 실행 및 URL 변화 때마다 해시됩니다 참조하십시오. 그리고 그것은 지금까지 작동합니다. 문제는 해시가 변경되지 않는 경우입니다. 예를 들어 첫 번째 Hashlink를 클릭하고 스크롤 한 다음 해시가 변경되지 않으므로 창 크롤이 하위 메뉴의 오프셋없이 앵커로 점프합니다.

클릭 리스너가 작동하지 않아 브라우저가 앵커로 건너 뛰기 전에 $("a").click(..)이 실행됩니다.

해시 태그가 변경되지 않을 때 어떻게 앵커 오프셋을 처리 할 수 ​​있습니까?

+1

당신이 (1 offsetSubmenu)'은'$ ("A")에'에서는 setTimeout을 사용하여 시도 되세요 (클릭합니다. ...)'? (처음으로'offsetSubmenu'를 실행하는 것과 같은 방식으로) –

+0

@AlvaroMontoro 아주 좋습니다. 대답으로 적어주세요. 나는 그것을 표시 할 것입니다. – nbar

답변

0

브라우저가 앵커로 건너 뛰기 전에 $("a").click(...)이 실행되면 offsetMenu 호출에 작은 지연을 추가하여 점프 후에 실행됩니다. 뭔가 같은 :

setTimeout(offsetSubmenu, 1) 

(당신이 처음 offsetSubmenu 실행과 같은 방식)

관련 문제