Skip to main content

Configuration Example - Offset

Live Demo

Check out the interactive live version here.

Primary Use Case

Accurately computing element viewability on web pages containing fixed floating headers, sticky navbars, or fixed sidebars. Without view offsets, elements positioned underneath a sticky header would be falsely marked as visible even though they are visually covered.


Annotated Code Walkthrough

1. Sticky Navigation Layout Setup

Define a fixed/sticky header (#header, height: 150px) alongside content sections:

<!DOCTYPE html>
<html lang="en">
<head>
<style>
body { height: 2000px; padding: 0; margin: 0; }
#header {
height: 150px;
width: 100%;
background: #111827;
position: sticky;
top: 0;
z-index: 100;
color: #fff;
padding: 20px;
}
#testDiv2 {
width: 300px;
height: 250px;
background: #6c63ff;
color: #fff;
padding: 20px;
margin-top: 100px;
}
</style>
</head>
<body>
<div id="header">Fixed Navigation Header (Height: 150px)</div>
<div id="testDiv2">Target Element Under Observation</div>
</body>
</html>

2. Viewport Offset Configuration

Specify viewOffset.top: 150 to shrink the effective top edge of the evaluation viewport by 150 pixels:

// Initialize Perceptor with top offset compensation
var tracker = new Perceptor(document.querySelector('#testDiv2'), {
viewOffset: {
top: 150, // Subtract top 150px of viewport covered by fixed header
},
});

tracker.watch();

Expected Behavior & Interactivity

  1. Occlusion Handling: When scrolling #testDiv2 upwards, as soon as it passes under the 150px sticky header region, the spectator automatically recalculates surface viewability and marks isVisible: false.
  2. Accurate Tracking: Eliminates false-positive viewability events caused by sticky page elements.