2013-09-03 5 views
0

closeGeneralHelp에 하나의 매개 변수 인 idtag이 있습니다. 이 기능은 다음을 수행하도록되어 :하나의 div를 숨기고 다른 div를 숨기고 새로운 unhidden div로 스크롤

A) slideUp '도움말'DIV, B) slideDown 그렇지 않으면 div의 세트 다음 C) 스크롤, 점프, 또는 (특정 이동하지만, 동적으로 결정) slideDown을 통해 노출 된 div 세트 중 다른 div.

나는 두 종류의 div ("DivsToShow"및 "DivToHide")를 가지고 있습니다. "DivsToShow"에는 몇 개의 다른 div가 포함되어 있으며 각 div에는 고유 한 id이 있습니다 (이것은 idtag입니다).

부품 (a) 및 (b)는 정상적으로 작동합니다. 특정한 (그러나 동적으로 결정된) div로 스크롤하는 것은 내가 무엇을 시도하든 실패하는 것처럼 보입니다. 여기에 코드가 있습니다. 각/* */주석 블록은이 작업을 수행 할 때 별개의, 그러나 실패한 (그리고 flailing) 시도를 나타냅니다.

(c) 작동에 도움이 필요하십니까? 저는 JavaScript/jQuery 유아입니다. 따라서 합리적으로 관련된 조언이나 조언도 환영합니다.

function closeGeneralHelp(idtag){ 
    $(".DivsToShow").slideDown("slow"); 
    $(".DivToHide").slideUp("slow"); 
    /* var divid = document.getElementById(idtag); 
    divid.style.display = 'block'; 
    divid.scrollIntoView(true); */ 
    /* document.getElementById(idtag).scrollIntoView();*/ 
    /* $(window).scrollTo(idtag,800,{queue:true});*/ 
    /* window.location.hash = idtag;*/ 
    /* window.setTimeout(function() {window.scroll(0, findPos(idtag));}, 5);*/ 
} 

고마워요! slidedown 완료 후

+1

slideup/slideDown을 "느리게"수행하는 경우 "DivsToShow"로 스크롤하기 전에 완료 될 때까지 기다려야합니다. [slideDown의 완료 콜백] (http://api.jquery.com/slideDown/)에 스크롤 코드를 추가하기 만하면됩니다. – Richard

+0

@ 리차드 감사합니다. 나는이 일을 완벽하게 수행했다. $ (".DivsToShow").이 완료를 표시하는 SO 에티켓은 무엇입니까? slideDown ("느리게", function() {document.getElementById (idtag) .scrollIntoView();}) ? –

+0

완료 하시겠습니까? 그 주제를 말하는거야? 답을 해답으로 표시하십시오 :) – Martijn

답변

1

당신은이 경우, 콜백 함수가 필요합니다

$(".DivToHide").slideUp("slow"); 
$(".DivsToShow").slideDown("slow", function(){ 
    var $ShownDiv = $(this); 
    // this is the callback of slidedown, after it is done, perform this: 
    $('html,body').scrollTop($ShownDiv.scrollTop()); 

    // Or animated: 
    $('html,body').animate({scrollTop: $ShownDiv.scrollTop()}, 1000); // in ms 

    // Or more native JS 
    document.getElementById($(ShownDiv)[0].id).scro‌​‌​llIntoView(); 
}); 

당신이 오래된 jQuery를 가지고 있고 업그레이드하지 못할 경우 $('#someElement').offset().top

에 찬성 $("#someElement").scrollTop()을 취소 할 수 있습니다
+0

고마워요! 불행히도 이러한 기능은 작동하지 않았습니다. 그러나, $ (". DivsToShow"). slideDown ("slow", function() {document.getElementById (idtag) .scro llIntoView();}); –

+0

좋아요,'html, body'을'window'로 바꾸 었는데 올바른 것 같습니다. 그러나 당신의 방법은 훌륭합니다. – Martijn

+1

당신의 대답은 거의 정확합니다. 당신이 윈도우를 참조한다면'$ (window)'여야합니다 - 따옴표는 없지만 animate를 사용하면 틀림없이'$ ('html, body ')' –

관련 문제