2016-06-22 2 views
2

ID로 스크롤 할 때 주소 표시 줄의 URL을 즉시 변경할 수 있습니까? 또는 여러 ID를 가진 긴 문서가 있고 주소 표시 줄에 URL이 변경 되어도 새 ID를 눌렀을 때 양식을 아래에서 위로 스크롤 할 수 있습니다.id를 수동으로 스크롤 할 때 url을 맨 위로 스크롤해도 변경합니까?

은 내가 Change url when manually scrolled to an anchor?

사용하지만 하단에서 스크롤이 맨 때이 작동하지 않습니다. 사전에

$(function() { 
 
    var currentHash = "#"; 
 
    $(document).scroll(function() { 
 
    $('.block').each(function() { 
 
     var top = window.pageYOffset; 
 
     var distance = top - $(this).offset().top; 
 
     var hash = $(this).attr('id'); 
 
     // 30 is an arbitrary padding choice, 
 
     // if you want a precise check then use distance===0 
 
     if (distance < 30 && distance > -30 && currentHash != hash) { 
 
     window.location.hash = (hash); 
 
     currentHash = hash; 
 
     } 
 
    }); 
 
    }); 
 
});
body { 
 
    margin: 0px; 
 
} 
 
div { 
 
    height: 900px; 
 
    text-align: center; 
 
    padding: 15px; 
 
    background-color: #00f; 
 
} 
 
div:nth-child(even) { background: #ccc; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 

 
<div class="block" id="one">Block 1</div> 
 
<div class="block" id="two">Block 2</div> 
 
<div class="block" id="three">Block 3</div> 
 
<div class="block" id="four">Block 4</div> 
 
<div class="block" id="five">Block 5</div>

감사합니다.

+0

매우 유용 할 수 있지만 관련 소스 코드는 어디에 있으며 어느 부분이 아닌 것처럼 보입니다. 일? 좀 더 구체적으로 표현할 수 있습니까? 이것을 달성하기 위해 어떻게 노력하고 있는지 볼 수 있습니까? 시도를 보지 않고도 솔루션을 제공하기 전에 문제를 설명하는 것은 불가능합니다. 누군가 당신을 위해 이것을 쓸 것을 기대하지 않는다면 ... – NewToJS

+0

이것은 나쁜 UX (사용자 경험)처럼 보입니다. http://stackoverflow.com/a/14660655/3022387에 "점프가 발생했습니다"라고 적혀 있습니다. 앵커 근처에 링크가 표시되어 사람들이 URL을 사용하여 페이지의 해당 위치에 연결할 수없는 이유는 무엇입니까? pilcrow를 사용 하시겠습니까? ¶ – flowtron

+0

@NewToJS를 다시 확인하십시오. – omkar

답변

3

는 귀하의 코멘트 후, 나는 당신이 달성하려고하는 것을 이해 :

다음 코드는 아래로 스크롤 업/기반으로합니다.

$(function() { 
    var blocksArr = $('.block'); 
    var lastScrollTop = 0; 
    var currentBlock = 0; 


    $(document).scroll(function() { 
    var st = $(this).scrollTop(); 
    var hash; 

    //make sure it is in the boundaries  
    if (st > lastScrollTop && currentBlock< blocksArr.length -1){ 
    // downscroll code 
     hash = $(blocksArr[++currentBlock]).attr('id'); 
     window.location.hash = (hash); 
    } 
    else 
     if (st < lastScrollTop && currentBlock > 0){ 
    // scrollup code 
     hash = $(blocksArr[--currentBlock]).attr('id'); 
     window.location.hash = (hash); 
    } 

    lastScrollTop = $(this).scrollTop(); 
    }); 
}); 

"working" fiddle (hash wont change on fiddle)

추가 :

은 블록 사이에 "점프"현재 블록을 저장하고 만들 것

$(function() { 
    var currentHash = "#"; 
    var blocksArr = $('.block'); 

    $(document).scroll(function() { 
    var currentTop = window.pageYOffset/1; 
    for (var i=0; blocksArr.length; i++){ 
     var currentElementTop = $(blocksArr[i]).offset().top; 
     var hash = $(blocksArr[i]).attr('id'); 
     if (currentElementTop < currentTop && currentTop < currentElementTop + $(blocksArr[i]).height() && currentHash!=hash){ 
       if(history.pushState) { 
       history.pushState(null, null, '#'+hash); 
     } 
     else { 
      location.hash = '#'+hash; 
     } 
       currentHash = hash; 
     } 

    } 

    }); 
}); 
:

당신은 단지 URL 변경을보고 싶다면

+0

고마워요 @ Ziv Weissman, 제 요청은, 위아래로 스크롤 할 때 div id @ top과 그 URL을 즉시 바꿔서 OK입니다. 하지만 내가 맨 아래로 스크롤하면 div의 상단에 도달 할 때까지 기다립니다. 감사합니다. – omkar

+0

@ Ziv Weissman. 감사합니다. 하지만 다음 ID로 이동합니다. 나는 정상적인 스크롤이 필요하다. like : http://eightbitstudios.com/ 다시 한번 감사드립니다. :). – omkar

+0

당신은 단지 창 URL에 해시 태그를보고 싶습니까? @omkar –

관련 문제