网站文字上浮动画

91 阅读1分钟

PixPin_2024-06-14_10-23-09.gif

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
  </head>
  <style>
    .box > div {
      background-color: #ccc;
      height: 300px;
      margin-bottom: 5px;
    }
    .item {
      text-align: center;
      background-color: yellowgreen !important;
    }
    .title {
      font-size: 25px;
    }
  </style>
  <body>
    <div class="box">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
      <div class="item">
        <div class="title animate__animated">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Tenetur deleniti architecto sequi, voluptatum aspernatur explicabo aliquid nesciunt recusandae aut nam magnam iste, ullam, tempore eligendi fugiat commodi illum eos! Amet?</div>
      </div>
      <div>8</div>
      <div>
        <div class="title animate__animated">dconsectetur adipisicing elit. Tenetur deleniti architecto sequi, voluptatum aspernatur explicabo aliquid nesciunt recusandae aut nam magnam iste, ullam, tempore eligendi fugiat commodi illum eos! Amet?</div>
      </div>
      <div>10</div>
    </div>

    <script>
      // 被观察元素
      let titleList = document.querySelectorAll(".title");

      let IO = new IntersectionObserver(IOCallback);

      titleList.forEach((item) => {
        IO.observe(item);
      });

      function IOCallback(entries, observer) {
        // 循环所有观察元素
        entries.forEach((item) => {
          // 如果出现在可视区内,则添加动画
          if (item.isIntersecting) {
            console.info("出现在可视区内", item.target);
            item.target.classList.add("animate__fadeInUp");
            // 停止观察当前元素 避免不可见时候再次调用 callback 函数
            IO.unobserve(item.target);
          }
        });
      }
    </script>
  </body>
</html>