Get height of non-overflowed portion of div

后端 未结 5 1760
[愿得一人]
[愿得一人] 2020-12-16 01:34

Say I have a wrapper div with a overflow:hidden on it and a div inside that that spans far below the visible portion. How can I get the visible height of the in

5条回答
  •  旧巷少年郎
    2020-12-16 02:28

    Quick algorithm that goes up the DOM tree looking at window.getComputedStyle for overflow: hidden

    function visibleArea(node){
        var o = {height: node.offsetHeight, width: node.offsetWidth}, // size
            d = {y: (node.offsetTop || 0), x: (node.offsetLeft || 0), node: node.offsetParent}, // position
            css, y, x;
        while( null !== (node = node.parentNode) ){  // loop up through DOM
            css = window.getComputedStyle(node);
            if( css && css.overflow === 'hidden' ){  // if has style && overflow
                y = node.offsetHeight - d.y;         // calculate visible y
                x = node.offsetWidth - d.x;          // and x
                if( node !== d.node ){
                    y = y + (node.offsetTop || 0);   // using || 0 in case it doesn't have an offsetParent
                    x = x + (node.offsetLeft || 0);
                }
                if( y < o.height ) {
                    if( y < 0 ) o.height = 0;
                    else o.height = y;
                }
                if( x < o.width ) {
                    if( x < 0 ) o.width = 0;
                    else o.width = x;
                }
                return o;                            // return (modify if you want to loop up again)
            }
            if( node === d.node ){                   // update offsets
                d.y = d.y + (node.offsetTop || 0);
                d.x = d.x + (node.offsetLeft || 0);
                d.node = node.offsetParent;
            }
        }
        return o;                                    // return if no hidden
    }
    

    example fiddle (look at your console).

提交回复
热议问题