-2

Is there a way to determine if a certain element is currently visible on the user's screen/viewport with the use of jQuery? (not using other external libraries)

Dropout
  • 13,653
  • 10
  • 56
  • 109
  • 2
    This has been answered many, many times before. You asked it and then answered within a minute. Why? –  Oct 27 '14 at 15:36
  • @DeeMac I was searching for a question of this sort and haven't found a solution. I've posted this question right away with an answer. (the answer your own question feature) – Dropout Oct 27 '14 at 15:38
  • possible duplicate of [Check if element is visible after scrolling](http://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling) – MaxiWheat Oct 27 '14 at 16:01

1 Answers1

0

Not directly by using default jQuery, but you can implement your own function, which you can use one jQuery elements afterwards:

(function ($) {
    $.fn.isOnScreen = function () {
        var topView = $(window).scrollTop();
        var botView = topView + $(window).height();
        var topElement = this.offset().top;
        var botElement = topElement + this.height();
        return ((botElement <= botView) && (topElement >= topView));
    }
})(jQuery);

After adding this code you can call $('#yourElementId').isOnScreen() which will return true if the whole element is on screen and false if it's not.

You can also play around with it a bit, so it would return true if at least a quarter of the element is visible on screen, for example like this:

(function ($) {
    $.fn.isOnScreen = function () {
        var topView = $(window).scrollTop();
        var botView = topView + $(window).height();
        var topElement = this.offset().top;
        var botElement = topElement + (this.height() / 4); //<---
        return ((botElement <= botView) && (topElement >= topView)); 
    }
})(jQuery);
Dropout
  • 13,653
  • 10
  • 56
  • 109
  • nice one... but what would you do, if the element by itself is on screen, but outside of a surrounding div container with overflow:hidden? – errand Oct 27 '14 at 15:34
  • you mean if the parent is hidden? @errand – Dropout Oct 27 '14 at 15:36
  • no, the parent is visible. something like: the parent div is 100x100px, overflow hidden and it contains 5 images with same size - only the first one would be visible and you'd have to scroll to make another one visible. but your viewport is 2000x1000px - so technically it is on screen - but it's invisible due to the overflow... – errand Oct 27 '14 at 15:38
  • @errand ah I get it now.. yeah, my answer only solves the *DOM point of view* of being *on screen*, if you can provide a solution which solves this issue as well I will be happy to learn something new and accept your answer ;) – Dropout Oct 27 '14 at 15:40
  • 1
    :) don't see a simple solution on this one. guess you have to extend your function, to check wether one of the parents of the element has an overflow:hidden and if so, find the dimensions of this parent and check, if your element is inside these dimensions... don't forget to account for scroll bar positions, too ... well, i don't see a use case for things like that ;) – errand Oct 27 '14 at 15:49