在视口中触发多个 svg 线动画

Trigger multiple svg line animations when in viewport

此 jsfiddle https://jsfiddle.net/20zhrw1o/1/ 展示了如何在视口中触发 svg 线条动画。我在我的(webflow)网站上工作。但是,如果我在一页上有多个 svgs 同时不可见,我该怎么办?目前只有第一个被触发。

在此先感谢您的帮助!

这是 javascript 部分,它切换 svg 的 css 以启动动画。

var svg = document.querySelector('svg');

function isElementInViewport(el) {
  var rect = el.getBoundingClientRect();
  var isOutside = (rect.top >= window.innerHeight) || (rect.bottom <= 0);
  return !isOutside;
}

window.addEventListener('scroll', function(e) {
  svg.classList.toggle('in-view', isElementInViewport(svg));
});

使用 document.querySelectorAll 并遍历返回的 NodeList:

var svg = document.querySelectorAll('svg');

function isElementInViewport(el) {
  var rect = el.getBoundingClientRect();
  var isOutside = (rect.top >= window.innerHeight) || (rect.bottom <= 0);
  return !isOutside;
}

window.addEventListener('scroll', function(e) {
  svg.forEach(function(el) {
    el.classList.toggle('in-view', isElementInViewport(el));
  });
});

此外,考虑使用 IntersectionObserver,它被认为比监听 scroll 事件的性能更高。