2014-02-11 4 views
2

URL에 해시 태그가있는 페이지를로드하면 페이지가로드 된 다음 앵커 태그로 이동합니다. 앵커 태그에 페이지를 직접로드하거나 최소한 스크롤을 부드럽게 만드는 방법으로이 "점프"를 방지 할 수 있습니까?앵커 태그에 직접 페이지로드

Chrome 및 Firefox에서는이 문제가 발생하지만 IE에서는 발생하지 않습니다.

+0

내부적으로 링크하는 경우 (페이지 내에서의 의미) 이벤트 핸들러를 추가하여 부드러운 스크롤을 구현할 수 있습니다. 그러나 사용자가 http://en.wikipedia.org/wiki/HTML#Elements와 같은 링크를 직접 입력하면 브라우저가 앵커 '# Elements'로 점프하는 방법을 제어 할 수 있는지 의심 스럽습니다. – surfmuggle

+0

@threeFourOneSixOneThree : 내부적으로 연결하는 것에 대해 이야기하는 것이 아닙니다. 그러나 위키 피 디아 페이지는 앵커에 직접로드됩니다 (또는 적어도 눈에 띄는 점프는 없습니다). – dmr

+2

안녕하세요 @dmr. 페이지를 뛰어 넘는 방법은 없습니다. 일부 페이지는로드 방식에 따라 덜 점프하는 것처럼 보이지만 해시 태그를 통해 섹션에 연결하는 동작은 여러 브라우저에서 표준입니다. 예를 들어 위키 피 디아조차도 나에게 눈에 띄는 점프가있다. jquery를 사용하여 스크롤을 애니메이션으로 만들거나 (더 매끄럽게) 페이지 전체의로드 시간을 개선하여 점프를 최소화 할 수 있습니다 (브라우저가 준비 될 때 앉아서 앉아서 섹션을 빠르게 건너 뛸 수 있습니다).) .. – Jack

답변

2

당신은 여전히 ​​당신이 jQuery로 뭔가 할 수 점프 문제가 발생하는 경우 : 이것은 단지 페이지로드 당 한 번만 작동합니다

//Use a RegEx pattern to search for an id, if present 
var pattern = new RegExp('\#(.*)'); 
var id = pattern.exec(window.location)[0].replace('#',''); 
//Prevent the browser's default behavior of jumping to the id 
document.location = '#'; 
//When the page finishes loading, smoothly scroll to the specified content 
$(document).ready(function() { 
    if(id != "") { 
     $('html,body').animate({ 
      scrollTop: $('#' + id).offset().top, 
     }, 650); 
    } 
}); 

참고.

+0

훌륭한 솔루션입니다. after, 'offset(). top'은 나에게 "예기치 않은", ""메시지를 주었다. – Maverick1st

+0

웹킷 브라우저에서 작동하지 않는다는 사실을 알고 있어야합니다. 'html'대신 'body'를 사용해야하는 사용자에게 적합합니다. – Maverick1st

+0

잘 잡으세요! ' '요소에서'animate'를 호출하는 것은 Chrome (v.32) 및 Firefox (v.27)에서는 작동하지만 Safari (v.7)에서는 실패합니다. 나는 'body'selector를 사용하도록 코드를 업데이트했다. –

관련 문제