Использовать jQuery для обнаружения переполнения контейнера? - PullRequest
9 голосов
/ 21 января 2010

Я видел этот вопрос , но мне кажется, что для этого нужен более "чистый" метод jQuery. Я даже не уверен, действительно ли это работает во всех сценариях. Есть ли способ для jQuery определить, переполнен ли контейнер без сравнения размеров?

Для пояснения, есть ли способ проверить, включился ли атрибут CSS overflow: hidden и скрывает ли контент?

Ответы [ 5 ]

12 голосов
/ 18 ноября 2010
$.fn.hasOverflow = function() {
    var $this = $(this);
    var $children = $this.find('*');
    var len = $children.length;

    if (len) {
        var maxWidth = 0;
        var maxHeight = 0
        $children.map(function(){
            maxWidth = Math.max(maxWidth, $(this).outerWidth(true));
            maxHeight = Math.max(maxHeight, $(this).outerHeight(true));
        });

        return maxWidth > $this.width() || maxHeight > $this.height();
    }

    return false;
};

Пример:

var $content = $('#content').children().wrapAll('<div>');
while($content.hasOverflow()){
    var size = parseFloat($content.css('font-size'), 10);
    size -= 1;
    $content.css('font-size', size + 'px');
}
5 голосов
/ 22 ноября 2011

Вы можете изменить атрибуты css в соответствии со своими потребностями.

$.fn.hasOverflow = function() {
    $(this).css({ overflow: "auto", display: "table" });
    var h1 = $(this).outerHeight();

    $(this).css({ overflow: "hidden", display: "block" });
    var h2 = $(this).outerHeight();

    return (h1 > h2) ? true : false;
};
1 голос
/ 21 января 2010

Чистого метода не существует. Вы можете сделать это двумя обертками, внешняя обертка имеет overflow: hidden и сравнивать размеры двух оберток, но все, что вы могли бы сделать, в конечном итоге окажется хакерским. Если функциональность действительно необходима, то вам придется жить с взломами.

0 голосов
/ 04 сентября 2014

Существует другое решение (в этом примере проверяется, не превышает ли высота), для него требуется, чтобы переполняемый контейнер был position:relative:

HTML

<div id="overflowing-container" style="position:relative">
    <div class="children"></div>
    <div class="children"></div>
    <div class="children"></div>
</div>

Javascript

     var last = $('.children:last'), container=$('#overflowing-container')
         lastOffsetHeight = container.scrollTop() + last.outerHeight(true) + last.position().top;

     if (last[0] && lastOffsetHeight > container[0].getBoundingClientRect().height) {
       console.log("thisContainerOverflows")     
     }
0 голосов
/ 16 июля 2013


Простое решение, которое я нашел, заключается в обнаружении scrollWidth из parent():

var totalWidth = $(this).parent()[0].scrollWidth;


<час /> ... Я думаю, что индекс 0 ссылается на "корневой узел" родителя, получая оттуда свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...