Back to Snippets
CODE

Check if Element is in Viewport

Description

Detects if a DOM element is visible in the viewport (fully or partially)

Code

/**
 * Check if element is in viewport
 * @param element Target element
 * @param fullyInView Check if element is fully visible (default: false)
 * @returns True if element is in viewport
 */
function isInViewport(element: HTMLElement, fullyInView = false): boolean {
  const rect = element.getBoundingClientRect();
  const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
  const viewWidth = Math.max(document.documentElement.clientWidth, window.innerWidth);

  if (fullyInView) {
    return (
      rect.top >= 0 &&
      rect.left >= 0 &&
      rect.bottom <= viewHeight &&
      rect.right <= viewWidth
    );
  }

  return (
    rect.bottom > 0 &&
    rect.right > 0 &&
    rect.top < viewHeight &&
    rect.left < viewWidth
  );
}

// Usage Example
const element = document.getElementById('target');
window.addEventListener('scroll', () => {
  if (isInViewport(element)) {
    console.log('Element is visible!');
    element.classList.add('visible');
  } else {
    element.classList.remove('visible');
  }
});

Usage

Ideal for lazy loading images, triggering animations when elements enter viewport, or infinite scrolling

Tags

DOMViewportScroll Detection