Skip to content

@longmo-utils/browser / isInViewport

Function: isInViewport()

ts
function isInViewport(element): boolean;

检查元素是否完全可见于视口中

Parameters

ParameterTypeDescription
elementHTMLElement要检查的 DOM 元素

Returns

boolean

如果元素在视口中完全可见则返回 true,否则返回 false

Examples

typescript
const footer = $('footer');
if (isInViewport(footer)) {
  console.log('Footer is visible');
}
typescript
const images = $$('img[data-src]');

function loadVisibleImages() {
  images.forEach(img => {
    if (isInViewport(img) && !img.src) {
      img.src = img.dataset.src;
      delete img.dataset.src;
    }
  });
}

window.addEventListener('scroll', loadVisibleImages);
window.addEventListener('load', loadVisibleImages);
typescript
const sentinel = $('.sentinel');

function loadMoreContent() {
  if (sentinel && isInViewport(sentinel)) {
    console.log('Load more content...');
    // 获取并追加新内容
  }
}

window.addEventListener('scroll', () => {
  requestAnimationFrame(loadMoreContent);
});
typescript
const sections = $$('section[data-track]');

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const section = entry.target;
      const trackId = section.dataset.track;
      console.log('Section viewed:', trackId);
      // 发送统计事件
    }
  });
}, { threshold: 0.5 });

sections.forEach(section => {
  if (isInViewport(section)) {
    const trackId = section.dataset.track;
    console.log('Initial view:', trackId);
  }
  observer.observe(section);
});

Released under the MIT License.