2013-04-27 3 views
0

윈도우 크기가 767px 미만일 때 div를 나중에 위치로 이동시키는 jQuery 코드가 있습니다. 모두 잘 작동합니다.detach() 후 잘못된 위치로 스크롤 ScrollTop insertAfter()

또한 페이지가로드 된 후 주 내비게이션을지나 스크롤하여 장치가 < 767px 인 경우 몇 가지 jQuery 코드가 있습니다.

scrollTop 기능이 정상적으로 작동합니다. detach() + insertAfter() 기능이 정상적으로 작동합니다.

그러나 ... insertAfter() 코드에 영향을 미치는 하나의 페이지에서

, 잘못된 영역으로 scrollTop 코드 스크롤됩니다. 요소가 이동하기 전에 앵커가 인 곳으로 스크롤하는 것 같습니다.

아이디어가 있으십니까? 페이지가 http://northqueensviewhomes.com/community에 있습니다 (브라우저 창을 축소해야 이러한 동작을 볼 수 있으므로 스크롤 기능을 보려면 작은 창을 다시로드해야 함).

는 여기에 두 가지 기능과 호출 ...

function rearrangeHelpfulLinks() { 
    var $theLinks = $('#quicklinks.rc.well'); 
    if (($theLinks).length) { 
     if ($(window).width() <= 767) { 
     $theLinks.detach().insertAfter('.core-copy'); 
     } else { 
     $theLinks.detach().insertAfter('#main-nav'); 
     } 
    } 
} 


function scrollOnSmallScreen() { 
    if ($(window).width() <= 767) { 
     $('html, body').animate({ 
     scrollTop: ($('#main').offset().top - 13) 
     },, 'easeInOutExpo'); 
    } 
} 

insertAfter() 루틴은 창 크기 조정 불려 ...

$(window).resize(function() { 
    rearrangeHelpfulLinks(); 
}); 

있어 ... 그리고 스크롤 기능을 완전하게하기 위해서 (페이지로드라고 간단 ...)

scrollOnSmallScreen(); 

필요한 경우 확실하지 않습니다. 더 이상 나를 도울 수있는 무엇이든지 (그러나!), 나는 앵커에게 단순히있는 정확한 위치로 스크롤을 얻고 싶습니다. #main.

모두에게 감사드립니다.

setTimeout(scrollOnSmallScreen,0); 

이 당신의 트레드와 DOM 변경 스레드 실행 후 자동 스크롤을 실행하여

+0

가'scrollOnSmallScreen()를 호출하려고; '에서는 setTimeout 사용'(scrollOnSmallScreen, 0);' 를 또한 어딘가에 추가하는 것이 좋다 '$ (창) .scroll (함수() {$ (' html body '). stop();});' 왜냐하면 내가 스크롤하고 싶으면 애니메이션 끝내기를 기다려야한다는 것을 매우 annoing하기 때문입니다. –

+0

setTimeout이 완벽하게 작동했습니다. 감사합니다. 왜 내가 그것에 대해 생각하지 않았는지 모르겠다. stop()에 대해서는 어디서 호출해야할지 모르겠습니다. 어느 곳에서나 자동 스크롤을 죽입니다. – dashard

+0

당신은'$ (window) .scroll (function() {$ ('html body'). stop();});'을 주터 범위로 실행하는 스크립트에 넣어야한다. –

답변

0

전화 scrollOnSmallScreen();.