Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the first DOM element that is visible in a viewport?

How can I get the first DOM element that is visible in a viewport?

PS: the first DOM element in a page will not be the first "visible" element when I scroll to the middle or bottom of the page

like image 883
rajeemcariazo Avatar asked Oct 22 '22 04:10

rajeemcariazo


1 Answers

In mind with the scroll, you'll need to query the whole document, get the elements offset positions, and match that agains the scrollTop value of the window. Then query the :eq(0) (jQuery) of those.

EDIT: I think this sample will work, haven't tried it out yet tho, since I'm unable to access any fiddle here at work computers.

$(function () {
    var scroll = $(window).scrollTop();
    var elements = $("*"); // VERY VERY bad performance tho, watch out!
    var el;
    for (var i=0; i<elements.length; i++) {
        el = $(elements[i]);
        if (el.offset().top >= scroll && el.is(':visible')){
            // "el" is the first visible element here!
            // Do something fancy with it

            // Quit the loop
            break;
        }
    }
});
like image 85
Eric Avatar answered Nov 01 '22 11:11

Eric