2010-04-03 3 views
2

Я знаю, что обнаружение присутствия полосы прокрутки должно быть одной из тех неуловимых вещей, от которых все мы должны пострадать. То, что я читал до сих пор, заключается в том, что вы не можете обнаружить присутствие полосы прокрутки, используйте только подсказки в DOM, чтобы узнать, есть ли может, и это невозможно сделать менее чем в 30 строках кода.Является ли обнаружение присутствия прокрутки в jQuery еще сложнее?

Это кажется мне немного невозможным сейчас, когда мы в 2010 году. У jQuery есть перекрестное браузерное надежное решение, которое позаботится об этом и работает по крайней мере в большинстве случаев? Любая помощь, пожалуйста, я тяну свои волосы, половина ее уже на полу.

+0

Это может быть наивный подход, но что не так с 'var scrollbar_present = $ (document) .height> $ (window) .height()'? – jholster

+0

Я не ворвался в реализацию jQuery, чтобы узнать, что представляет собой код javascript в этой статье. Возможно ли, что это все, что мне нужно? Если это стандартный способ, который выполняется в jQuery, то я буду использовать его точно. У кого-то есть возражения против этого решения? – donpal

+0

@Yaggo, Хорошо, я просто протестировал '$ (document) .height> $ (window) .height()', и он дает мне ложь, независимо от того, вижу ли я полосы прокрутки или нет. Поэтому я предполагаю, что это не сработает. – donpal

ответ

3

Возможно, это не так элегантно, как вы надеялись, но это адекватная адаптация из сценария, который я недавно написал для вычисления высоты видового экрана.

Логично, что вы бы хотели назвать эту функцию на document ready и window resize.

Он также имеет дело с несоответствиями, которые вы бы столкнуться в Opera (строка 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 Приятно, но он не принимает рассмотрение 'overflow: hidden', что может помешать появлению полосы прокрутки. –

+0

Я думаю, что это сработало бы до тех пор, пока '# wrapper' не был элементом с' overflow: hidden' - скажем, что он был обернут в '# outer-wrapper' и имел' overflow: hidden'; не будет ли высота '# обертки 'оставаться прежней? – Steve

+0

Вы также можете реорганизовать последние несколько строк на третичный 1-футовый, как этот 'return (viewportHeight <= $ ('# wrapper'). Height())? true: false; «Я протестировал его, хотя и все еще получаю ложное, не уверен, что случилось. Я думаю, что у меня может быть конфликт javascript/jquery где-то, или я неправильно вызываю эти функции. – donpal

Смежные вопросы