2010-06-26 3 views
3

HTML 및/또는 Javascript를 사용하여 다음 페이지 앵커가 자동으로 작동하고 이동하는 것이 가능합니까?HTML 및/또는 JS로 다음 페이지 앵커로 이동하는 방법?

+3

다음으로 어떤 의미로? 현재 스크롤 량에 비례하여 가장 낮은 위치에 있습니까? –

+0

예. 나는 html 전자 책에서 각 챕터 설정을 자신의 앵커와 부동 바닥 글로 사용하고 있는데 다음과 이전 챕터 버튼을 가질 수 있기를 원합니다. – hrickards

+0

이것이 공정한 질문이라고 생각합니다. 이유가 확실하지 않은 이유는 무엇입니까? –

답변

1

당신이 알고있는 앵커/아이템과 관련 있다고 가정 할 때; jQuery를 사용하는 경우에는 "Next Sibling"에 대한 선택자가 있습니다. 여기에 문서를 찾을 수 :

http://api.jquery.com/next-siblings-selector/

나는 그냥 실행하고; 그렇지 않으면 나는 당신을 위해 전체 선택자를 만들 겠지만, 나중에 오늘 대답이 없으면 나는 함께 정리할 것입니다. 추가 읽기를 기반으로 사실 편집

, 나는 당신이 조금 더 많은 작업입니다 ... 페이지의 현재 스크롤 위치를 기준으로 다음 앵커 상대를 찾고 있습니다 quessing ...하지만하고 할 수있다 ... (다시, 나는 JS를 제공하기 위해 오늘 나중에하려고 노력할 것이다).

편집

이 100 %되지 않습니다 완료; 그러나 당신이 일반적인 아이디어를 얻을 정도로 충분해야합니다. 귀하의 페이지가 정적 인 내용이라면 페이지를 살펴보고 문서상의 모든 오프셋을 캐싱 할 것을 권장합니다. 요소 오프셋을 결정하는 것은 꽤 느릴 수 있습니다 (특히 구형 브라우저에서). 당신이 페이지는 동적 콘텐츠를 가지고 앵커의 위치가 문서 내에서 고정되지 않은 경우

var _anchorOffets = {}; 

$(document).ready(function() { 
    $("A[id]:not(A[href])").each(function (index, value) { 
    var $anchor = $(value); 
    _anchorOffets[$anchor.attr("id")] = $anchor.offset().top; 
    }); 
}); 

function getNextAnchorId() { 
    var $window = $(window); 
    var minOffset = $window.scrollTop() + $window.height(); 

    for (var anchor in _anchorOffets) { 
    if (_anchorOffets[anchor] >= minOffset) { 
     return anchor; 
    } 
    } 

    return null; 
} 

대안으로, 당신은 당신의 페이지에 따라

function getNextAnchorId() { 
    var result = null; 

    $("A[id]:not(A[href])").each(function (index, value) { 
    var $anchor = $(value); 
    var $window = $(window); 
    var minOffset = $window.scrollTop() + $window.height(); 

    if($anchor.offset().top >= minOffset) { 
     result = $anchor.attr("id"); 
     return false; 
    } 
    }); 

    return result; 
} 

에 가까운 무언가를 찾고있을 것입니다, 당신은해야 할 수도 있습니다 이 아이디어를 확장하십시오. 위의 두 가지 방법 모두 매우 기본적인 문서 레이아웃을 사용합니다. 상대/절대 positing 또는 scrollable div 등으로 계속해서 멋진 일이 있다면, 이것을 강화할 필요가 있습니다 (필자는 코드를 제공 할 수 있습니다). 지금은 기본적으로 페이지 앵커를 찾고 스크롤 위치를 기반으로 앵커를 결정하는 것으로 가정하고 있지만 또한 광범위하게 테스트하지 않았으므로 약간의 연마 작업이 필요할 수도 있습니다. D

+0

죄송합니다. 질문에서 명확히하지 않았습니다. 현재 페이지 위치와 관련이 있습니다. JQuery에서 페이지 위치에서 현재 앵커를 가져올 수있는 것이 있습니까? (나는 아무것도 찾을 수 없지만 뭔가 놓칠 수 있습니다.) 편집 : 좋아, 고마워. 나는 내일까지 참을성있게 대답 할 수 없을지도 모른다 (나는 영국이다. 그래서 저녁까지 여기에오고있다). – hrickards

0

나는 당신이 무엇을 찾고 있는지 알고 있습니다. 당신이 아이디의를 알고 있다면 당신은 아마 캘거리 코더에 당신의 코멘트를 읽는 innerText와

+0

해답을 가져 주셔서 감사합니다.하지만 그 일을 할 수있는 또 다른 방법을 찾아 냈습니다. – hrickards

1

하여 앵커를 얻을

function Next(){ 
    var lnkNext = document.getElementById("yourNextAnchorId"); 
    window.location.href = lnkNext.src; 
} 

당신이 아이디의를 모르는 경우 ...이 사용할 수 있습니다, 저는 믿습니다 - 나는 경우 올바르게 이해하십시오 - 현재 URL에서 앵커를 찾으려고합니다. window.locaiton.hash으로이 작업을 수행 할 수 있습니다. 예 :

alert(window.location.hash); 
+0

감사합니다. 유일한 문제는 사용자가 아래로 스크롤하면 앵커가 URL에없는 것입니다. 현재 스크롤 위치에서 앵커를 찾을 수있는 유사한 코드입니까? – hrickards

+0

페이지에서 다른 앵커를 클릭하지 않거나 페이지에서 특정 지점을 통과 할 때 어떻게 든 앵커 점프가 발생하지 않는 한 유감스럽게도 (필자는이 방법이 가능할지라도이 방법을 권장하지 않습니다 ... 오히려 사용자에 대한 예리한 경험). –

+0

하지만이 사람이하는 것과 비슷한 방식으로 스크롤 위치를 확인할 수 있습니다. http://articles.sitepoint.com/article/preserve-page-scroll-position –

1

답변 모두 감사합니다,하지만 난 http://marcgrabanski.com/articles/scrollto-next-article-button-jquery를 구현하여이 작업을 얻을 수 있었다. 이것은 다음 앵커가 아닌 다음 헤더로 이동하지만 앵커를 사용하는 것이 중요하다면 쉽게 적응할 수 있다고 상상합니다.

+0

흥미 롭습니다. 저기있는 jQuery 플러그인 : D 상당히 정교한 코드처럼 보이지만 트릭을 수행하는 한 충분히 좋습니다. 좋은 발견. –

관련 문제