Отображение/исчезновение полосы прокрутки в jQuery?

Есть ли простой способ в jQuery обнаружить, когда полосы прокрутки появляются и исчезают на div, который имеет переполнение: auto? (Как событие? Пальцы пересекли...)

(я бы предпочел не смотреть на высоту содержимого div)

Ответы

Ответ 1

Как говорили другие, нет простого способа. Здесь некоторый код, который я использовал в прошлом, чтобы определить, присутствует ли полоса прокрутки.

// Used like $('#my-id').hasScrollbar();

jQuery.fn.hasScrollbar = function() {
    var scrollHeight = this.get(0).scrollHeight;

    //safari scrollHeight includes padding
    if ($.browser.safari)
        scrollHeight -= parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom'));

    if (this.height() < scrollHeight)
        return true;
    else
        return false;
}

Вам нужно будет вручную вызвать это после добавления или удаления содержимого из div, и он, вероятно, будет работать, только если вы вызываете его на видимые элементы, но лучше, чем начинать с нуля.

Ответ 2

Другой способ добиться этого - проверить, есть ли полосы прокрутки, используя scrollLeft или scrollTop:

//nudge the scrollbar away from its starting position

$('#your_selector').scrollLeft(1);

//A value of 0 is assigned if the scrollbars are at their default position, 
//or are abscent

if($('#your_selector').scrollLeft() !== 0) return true;

//put the scrollbar back to its starting position

$('#your_selector').scrollLeft(0);

Ответ 3

Насколько я знаю, для этого нет события.
Однако вы "можете" написать свое специальное мероприятие для этого, я думаю, вы должны проверить для высоты и ширины.

Должно быть возможно обнаружить полосы прокрутки, если .innerHeight выведет .outerHeight значение элемента.