Determine visibility / real z-index of html elements

前端 未结 3 1827
孤独总比滥情好
孤独总比滥情好 2020-12-21 03:21

Is it possible to determine if an html element is visible to the user?

Example

A page has an input field with a datepicker. If the user clicks on the input

3条回答
  •  盖世英雄少女心
    2020-12-21 03:46

    This might work. I haven't tested it. It's a modified version of some code I found here.

    function elementWithinElement(elemPossiblyCovered, elemPossiblyCovering)
    {
        var top = elemPossiblyCovered.offsetTop;
        var left = elemPossiblyCovered.offsetLeft;
        var width = elemPossiblyCovered.offsetWidth;
        var height = elemPossiblyCovered.offsetHeight;
    
        while (elemPossiblyCovered.offsetParent)
        {
            elemPossiblyCovered = elemPossiblyCovered.offsetParent;
            top += elemPossiblyCovered.offsetTop;
            left += elemPossiblyCovered.offsetLeft;
        }
    
        return (
        top >= elemPossiblyCovering.offsetTop &&
        left >= elemPossiblyCovering.offsetLeft &&
        (top + height) <= (elemPossiblyCovering.offsetTop + elemPossiblyCovering.offsetHeight) &&
        (left + width) <= (elemPossiblyCovering.offsetLeft + elemPossiblyCovering.offsetWidth)
      );
    }
    

    So it'd be something like:

    if(elementWithinElement(myTextbox, theDatepickerDiv))
    { 
        // It's hidden
    }else
    {
        //It's visible
    }
    

    Edit: Some of the code wasn't updated. Should be fixed now.

    Edit Again: Fixed the code and tested it. It works!

提交回复
热议问题