2017-11-02 8 views
0

현재 아약스 지원 웹 사이트에서 작업 중입니다. 웹 사이트와 브라우저의 역사를 탐색하는 것은 효과적이지만 해결할 수없는 한 가지 문제가 있습니다.뒤로 버튼 누르기 후 Ajax 웹 사이트가 맨 위로 이동하지 못하도록

사용자가 뒤로 버튼을 누르면 마지막 페이지가 다시 나타납니다. 내가 popstate 이벤트를 통해 이전에 세로 스크롤 위치를 설정하지만, 그것은

function loadContent(nextContent, nextUrl, newPage = true) { 
    var currUrl = window.location.pathname; 
     currUrl = currUrl.slice(7,currUrl.length); 
    var scrollY = window.scrollY; 
    var prevContent = document.getElementById("page").innerHTML; 

    document.getElementById("page").innerHTML = nextContent; 

    if (newPage) { 

     // overwrite current history entry 
      history.replaceState({ content: prevContent, url: currUrl, scrollY: scrollY }, null, currUrl); 

     initPage(); 
     window.scrollTo(0,0); 

     // write new entry 
      history.pushState({ content: nextContent, url: nextUrl, scrollY: 0 }, null, nextUrl); 

    } else { 
     initPage(); 
     // scroll to previous scroll position 
     window.scrollTo(0,history.state.scrollY); 
    } 
} 

window.onpopstate = function(e) { 
    loadContent(e.state.content, e.state.url, false); 
    // page scrollY will be set in load, after page content was added 
} 

내가 코드가 지금까지 이전에 내가 윈도우 후 경고를 넣어했기 때문에 작동하는지 알아 ... 다시 맨 위로 점프 .scrollTo() 그리고 동결 중에 페이지가 올바른 위치에 있다는 것을 알았습니다. 그러나 계속 한 후에 그것은 정상에 뛰어 올랐다. 다른 (기본값) 이벤트가 백그라운드에서 맨 위로 스크롤됩니까? 나는 다음에 onpopstate 기능을 변경하여 지금 문제를 해결 도움

답변

1

에 대한

감사 :

window.onpopstate = function(e) { 
    loadContent(e.state.content, e.state.url, false); 

    // as previous window.scrollTo() have no effect, do it within a few millisecs again 
    setTimeout(function() { 
     window.scrollTo(0,history.state.scrollY); 
    }, 5); 
} 
정말

하지 아름다운,하지만 작동합니다. 누군가가 깨끗한 수정 또는이 효과가 발생하는 이유를 알고 있다면 지식을 공유하십시오!

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. - [리뷰에서] (리뷰/저품절 포스트/17815005) – baudsp

+0

@baudsp 방금이 순위를 올려서 더 많은 (또는 모든) 사람들이이 게시물을 최종적으로 볼 수 있기를 바랍니다. 운동을하지 못했지만 다행스럽게도 2 일 후이 문제를 해결할 수있었습니다 ... 현상금을주지 않고 게시물에 관심을 끌 수있는 방법이 있습니까 (실제로 많은 것을 제공 할 수는없는 26 ...) – Jaspa

+0

검토 대기열에서 답변을 검토 할 때 내 의견이 자동으로 추가되었습니다. 질문을 수정하면 홈페이지에 다시 보내야하므로 대답 할 필요가 없습니다. – baudsp