2009-07-16 7 views
3

사용자가 페이지를 아래로 스크롤 할 때 플로팅 메뉴 (절대적으로 배치 됨)가 표시되는 경우 문제가 생깁니다. 페이지 바닥에 오는 길은 바닥 글과 충돌합니다.플로팅 메뉴가 페이지 하단에 닿기 전에 멈춤

나는 페이지의 맨 아래에서 400px라고 말하고 싶다. 할 수 있다면 누구에게 알 수 있습니까? 사전에

var name = "#about"; 
var menuYloc = null; 

$(document).ready(function(){ 
    menuYloc = parseInt($(name).css("top").substring(0,$(name).css("top").indexOf("px"))) 
    $(window).scroll(function() { 
     var offset = menuYloc+$(document).scrollTop()+"px"; 
     $(name).animate({top:offset},{duration:500,queue:false}); 
    }); 
}); 

감사 : 여기

코드입니다!

라이언

답변

3
하나는이 아무튼 있도록 '바닥 글'의 양을 계산 볼 수 후 바닥 글 위 # 정보를 배치 할 필요가

그것을 숨기지 않습니다. 나는 다음 코드는 트릭을 할해야한다고 생각 :

var name = "#about"; 
var menuYloc = null; 
var footer = '#yourFooterId'; //Specify the ID for your footer. 

$(document).ready(
    function() 
    { 
     menuYloc = parseInt($(name).css("top").substring(0,$(name).css("top").indexOf("px"))) 
     $(window).scroll(
      function() 
      { 
       var offset = menuYloc + $(document).scrollTop(); 
       var anotherOffset = offset; 

       var docTop = $(window).scrollTop(); 
       var footerTop = $(footer).offset().top; 

       var maxOffset = footerTop - $(name).height() - 20; 
       var minOffset = docTop; 

       offset = offset > maxOffset ? maxOffset : offset; 
       offset = offset < minOffset ? minOffset : offset; 

       $(name).animate({top:offset + 'px'},{duration:500,queue:false});  
      } 
     ); 
    } 
); 

편집 1 :

위의 코드에서 버그를 수정합니다. 이제는 효과가있다.

편집 2 :

업데이트 데모 코드, 그것은 모든 브라우저에서 작동합니다.

메뉴를 떠 항상 오프셋 (offset) 최소를 계산하여 볼 수 있는지 확인 만들기 :

EDIT 3 [이전 데모 코드는 'CONSOLE.LOG'당신이 파이어 폭스를 사용하지 않는 경우 실패 할 수있는 전화를했다]. 녹색 부동 사업부가 적용 그런 논리가없는 반면

레드 부동 사업부는 항상 바닥 글 위에 남아 :

Demo Page Code

이 데모의 모습을 어떻게

Check the demo →

.

+0

SolutionYogi에게 고마워요.하지만 이것 역시 깨지게되었습니다. 흠 왜 그래도 확실하지 : S – Ryan

+0

정확히 무엇이 중단 되었습니까? 그것은 전혀 스크롤되지 않습니까? 바닥 글과 겹치지 않습니까? – SolutionYogi

+0

전혀 스크롤하지 않습니다 – Ryan

1

은 (안된) 이런 식으로 뭔가를 시도 :

var name = "#about"; 
var menuYloc = null; 

$(document).ready(function(){ 
    var menu = $(name); 
    menuYloc = parseInt(menu.css("top").substring(0,menu.css("top").indexOf("px"))); 
    var height = parseInt(menu.attr('offsetHeight') + (parseInt(menu.css('marginTop')) || 0) + (parseInt(menu.css('marginBottom')) || 0)); 
    var footerYLoc = $('#footer').offset().top; 
    $(window).scroll(function() { 
     var offset = menuYloc+$(document).scrollTop(); 
     if ((offset + height) >= footerYloc) offset = footerYloc - height; 
     menu.animate({top:offset+"px"},{duration:500,queue:false}); 
    }); 


}); 
+0

덕분에이 didnt한다 그래도 작동하는 것, petersendidit. 메뉴가 모두 함께 움직이는 것을 멈 췄지 만, 그게 깨진 것을 발견 할 수 없었던 것 같습니다 ... – Ryan

관련 문제