【问题标题】:Howto: add class when section is in viewport如何:当部分在视口中时添加类
【发布时间】:2020-08-12 18:24:24
【问题描述】:

我正在尝试获得类似于https://stackoverflow.com/a/45378478(预览:https://codepen.io/jbanegas/pen/LjpXom)的绘图动画效果,以便在用户滚动到页面的此部分时加载。它旨在在用户浏览页面时添加多个这样的绘图框。

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

jQuery

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

HTML

<div class="thisisatest"></div>

我尝试将.ready() 替换为:

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

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

任何帮助将不胜感激。

【问题讨论】:

  • jquery 还没有过时,但它正在慢慢死去 :) 滚动到特定容器时你需要这个动画吗?
  • 没错,但在一个页面上会有一些。我想一旦有人开始工作,它只是改变了被称为@sergeykuznetsov 的类。
  • 请在此处插入包含许多块的代码,我会帮助您

标签: javascript jquery scrollview viewport jquery-events


【解决方案1】:

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

这里是原版 JS 解决方案...

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

References 阅读有关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);

示例: jsfiddle

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多