微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

querySelectorAll && getBoundingClientRect

如何解决querySelectorAll && getBoundingClientRect

我在使用 JavaScript querySelectorAll () 方法时遇到问题。

我想对两个段落 (p) 标签设置淡入淡出效果,它们最初的不透明度都设置为 0,并且转换:translateY 为 15vh 以将它们向下移动一点,并且我希望段落出现在底部时在用户向下滚动期间,返回到不透明度为 1 并转换:translateY 为 0。

我创建了一个名为 scrollAppear()函数,里面有很多东西..

function scrollAppear()

首先,我有一个变量paragraphsToFade,其中包含类“paragraphs_to_fade”的两个段落; 我使用 querySelectorAll 方法获取具有类 (.paragraphs_to_fade) 的两个 (p) 标签

这会返回一个数组(nodeList)..

    var paragraphsToFade=document.querySelectorAll(".paragraphs_to_fade");

然后我想访问段落的坐标 Y,为此我使用了方法 getBoundingClientRect().top,它返回指定元素的顶部 relative在这种情况下,到窗口顶部

我将该值存储在一个名为 paragraphsPosition 的变量中;

但是要获得两个 (p) 元素的坐标 Y,我必须循环到 for 循环中并指定 [i] 变量,该变量会像这样将两个值进行循环迭代:

   for (let i = 0; i < paragraphsToFade.length; i++) {
        var paragraphsPosition=paragraphsToFade[i].getBoundingClientRect().top;
    }

之后我创建了一个名为 screenSize 的变量,它可以访问窗口高度:

var screenSize=window.innerHeight;

然后我用if/else语句检查一个条件,检查元素的顶部值是否小于窗口的高度,如果为真,则添加类fadeInAnimation,它将不透明度重置为1和转换:translateY to 0 with a transition of 1s,正如我在解释开始时所指定的那样。

   var screenSize=window.innerHeight;
    if(paragraphsPosition < screenSize){
        paragraphsToFade.classList.add("fadeInAnimation");
    }    

最后,当用户滚动窗口时,我只调用了 scroll 函数

window.addEventListener("scroll",scrollAppear);

我不知道为什么但是当我使用 querySelector 并且我只有一个段落时,淡入淡出效果有效,但是当我使用 querySelectorAll 并且我想抓取多个段落时,它不起作用,也许我没有' t 循环很棒或其他什么,我在不同的地方使用了 console.log 试图了解发生了什么,但我不明白为什么?

我在教程中看到了这种淡入淡出效果https://www.youtube.com/watch?v=C_JKlr4WKKs

解决方法

看到这个小提琴,你将类附加到一个包含多个元素的对象,而不是每个元素本身。

当您遍历数组时,将类包含在 for 循环中的元素中

function scrollAppear(){
  var paragraphsToFade = document.querySelectorAll(".paragraphs_to_fade");
  var paragraphsPosition;
  for (let i = 0; i < paragraphsToFade.length; i++) {
    paragraphsPosition=paragraphsToFade[i].getBoundingClientRect().top;
    var screenSize=window.innerHeight;
    if(paragraphsPosition < screenSize && !paragraphsToFade[i].classList.contains("fadeInAnimation") ){

      paragraphsToFade[i].classList.add("fadeInAnimation");
          console.log('added class');
    }    
  }
}
window.addEventListener("scroll",scrollAppear);

工作演示: https://jsfiddle.net/k5ubsecf/1/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。