2010-04-03 3 views
2

나는 스크롤바의 존재를 발견하는 것이 우리 모두가 겪어야하는 어려운 것들 중 하나라고 생각한다. 지금까지 읽은 내용은 실제로 스크롤바 존재를 감지 할 수 없으며 DOM에서 힌트를 사용하여 일 수 있고 일 수 있는지를 확인하고 30 줄 미만의 코드에서는 수행 할 수 없습니다.jQuery로 스크롤바 존재를 감지하는 것이 여전히 어렵습니까?

jQuery에는 브라우저를 지원하는 신뢰할 수있는 솔루션이 있습니까? 예를 들어, jQuery에는 이러한 문제를 해결하고 적어도 대부분의 경우 작동합니다. 어떤 도움이라도, 제 머리카락을 잡아 당기고 있습니다, 그것의 절반은 이미 바닥에 있습니다.

+0

이것은 단순한 접근 일 수 있지만 'var scrollbar_present = $ (document) .height> $ (window) .height()'의 문제점은 무엇입니까? – jholster

+0

나는이 단일 라인이 구현하는 바닐라 자바 ​​스크립트 코드를 알기 위해 jQuery 구현을 파고 들지 않았다. 이게 내가 필요한 전부 일 수 있니? 이것이 jQuery에서 수행되는 표준 방법이라면, 나는 그것을 확실히 사용할 것이다. 누구든지이 솔루션에 이의가 있습니까? – donpal

+0

@ Yaggo, Ok, 방금 $ (document) .height> $ (window) .height()를 테스트했는데 스크롤바가 보이는지 여부에 관계없이 false가 나옵니다. 그래서 아마 작동하지 않는 것 같아요. – donpal

답변

3

아마 당신이 바라는만큼 우아한 것은 아니지만, 이것은 내가 최근에 뷰포트 높이를 계산하기 위해 작성한 스크립트의 적절한 적용입니다.

논리적으로이 함수는 document readywindow resize에서 호출 할 수 있습니다.

그것은 또한 당신이 오페라 (2 호선)와 IE7 (6 호선)에서 발생하는 것 불일치 다루고있다.

function scrollbar() { 
    var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height(); 

    if (jQuery.browser.msie) { 
     if(parseInt(jQuery.browser.version) == 7) { 
      viewportHeight -= 3; 
     } 
    } 

    if(viewportHeight <= $('#wrapper').height()) { 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

+1 멋지지만 찍지는 않습니다. '오버플로 : 숨김'으로 스크롤바가 나타나지 않도록 할 수 있습니다. –

+0

'# wrapper'는'overflow : hidden' 요소가 아니고'# outer-wrapper'에 싸여 있고'overflow : hidden'을 가지고있는 한 작동합니다. 'wrapper'의 높이가 같지 않습니까? – Steve

+0

또한이'return (viewportHeight <= $ ('wrapper'). height())와 같이 마지막 몇 줄을 1 차선 3 차로 리팩토링 할 수 있습니까? true : false;'나는 그것을 테스트했지만 여전히 틀린 것이 틀림 없습니다. 무엇이 잘못되었는지를 확신합니다. 어딘가에 자바 스크립트/jquery 충돌이있을 수 있습니다 또는 이러한 함수를 잘못 호출하는 것 같아요. – donpal

관련 문제