如何:当部分在视口中时添加类

nic*_*yyc 1 javascript jquery viewport scrollview jquery-events

我正在尝试获得类似于/sf/answers/3176493491/(预览:https : //codepen.io/jbanegas/pen/LjpXom)的绘图动画效果,以便在用户滚动到该部分时加载页。它旨在在用户导航页面时添加多个这些绘图框。

我意识到 jQuery 现在有点过时了,但这是在一个已经使用这个框架的 WordPress 网站上。

jQuery

<script type='text/javascript'> 
    $(document).ready(function(){
        $('.thisisatest').addClass('draw');
    });
</script>
Run Code Online (Sandbox Code Playgroud)

HTML

<div class="thisisatest"></div>
Run Code Online (Sandbox Code Playgroud)

我试过替换为.ready()

onload- https://www.w3schools.com/jsref/event_onload.asp

.scroll()- https://api.jquery.com/scroll/

任何帮助将不胜感激。

iki*_*kiK 5

你缺少基础知识。除了添加滚动事件外,您还需要明确元素是否在视口中。

这是香草JS解决方案......

它将适用于所有具有内容.thisisatest类的div 。

参考阅读有关该isInViewport函数如何工作的链接。

var isInViewport = function(elem) {
  var distance = elem.getBoundingClientRect();
  return (
    distance.top >= 0 &&
    distance.left >= 0 &&
    distance.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
    distance.right <= (window.innerWidth || document.documentElement.clientWidth)
  );
};
// read the link on how above code works

var findMe = document.querySelectorAll('.thisisatest');

window.addEventListener('scroll', function(event) {
// add event on scroll
findMe.forEach(element => {
    //for each .thisisatest
    if (isInViewport(element)) {
      //if in Viewport
      element.classList.add("draw");
    }
});
}, false);
Run Code Online (Sandbox Code Playgroud)

示例: jsfiddle