jQuery check if element is visible on screen

Check if element is visible in viewport:

js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
$.fn.is_on_screen = function(){
 
    var win = $(window);
 
    var viewport = {
 
        top : win.scrollTop(),
 
        left : win.scrollLeft()
 
    };
 
    viewport.right = viewport.left + win.width();
 
    viewport.bottom = viewport.top + win.height();
 
     
 
    var bounds = this.offset();
 
    bounds.right = bounds.left + this.outerWidth();
 
    bounds.bottom = bounds.top + this.outerHeight();
 
     
 
    return (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom));
 
};
 
 
 
if( $('.target').length > 0 ) { // if target element exists in DOM
 
    if( $('.target').is_on_screen() ) { // if target element is visible on screen after DOM loaded
 
        $('.log').html('<div class="alert alert-success">target element is visible on screen</div>'); // log info      
 
    } else {
 
        $('.log').html('<div class="alert">target element is not visible on screen</div>'); // log info
 
    }
 
}
 
$(window).scroll(function(){ // bind window scroll event
 
    if( $('.target').length > 0 ) { // if target element exists in DOM
 
        if( $('.target').is_on_screen() ) { // if target element is visible on screen after DOM loaded
 
            $('.log').html('<div class="alert alert-success">target element is visible on screen</div>'); // log info
 
        } else {
 
            $('.log').html('<div class="alert">target element is not visible on screen</div>'); // log info
 
        }
 
    }
 
});

html:

1
2
3
4
5
6
7
8
9
10
11
<div class="log">log</div>
 
 
 
scroll to target element<br> scroll to target element<br> scroll to target element<br> scroll to target element<br>
 
scroll to target element<br> scroll to target element<br> scroll to target element<br> scroll to target element<br>
 
 
 
<h3 class="target">target element</h3>

10 thoughts on “jQuery check if element is visible on screen”

  1. I was trying to target all the image tag that were inside a view port and loading only them .

    What I was doing is something like this

    Hence I wanted to check

    $('li).each(){

    if(img is vissible in viewport)

    {

    var source = this.attr(data-src);

    this.attr('src', 'source');

    }

    }

    Can you give me some suggestion if this is the right way to load the images in my mobile app ?

    And if yes then how can i use you function to do this

    Thanks & Regards

    Reply

Leave a Reply to chris Cancel reply