使用 Intersection Observer API 延迟翻译元素

2024-03-02

我在用着路口观察器 API https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API当用户滚动到内容时显示元素。效果很好,但我想要延迟显示 div,如果有 4 个div's,我希望显示第一个,接下来 0.5 秒显示下一个......并非全部同时显示。在示例中,效果仅适用于第一个class同样,如果有超过 1 个class就像有的那样,它不适用于下一个img classes,只有第一个。你可以看到这个例子的底部page https://lagaleramagazine.es/rucab/index.html.

HTML

<section id="staff" style="padding-top: 100px;">
  <div class="col-lg-12 mx-auto mb-5">
    <div class="container">
      <div class="row icons-info">
        <div class="col-xs-12 col-sm-6 col-md-6 col-lg-3">
          <img class="floating show-bottom" src="img/Muñeco 1-08.png">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros. </p>
        </div>
        <div class="col-xs-12 col-sm-6 col-md-6 col-lg-3 ">
          <img class="floating" src="img/Muñeco 2-08.png">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros.</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-md-6 col-lg-3 ">
          <img class="floating" src="img/Muñeco 3-08.png">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros.</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-md-6 col-lg-3">
          <img class="floating" src="img/Muñeco 1-08.png">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros. </p>
        </div>
      </div>
    </div>
  </div>     
</section>

JS

// Instantiate a new Intersection Observer
let observer7 = new IntersectionObserver(onEntry7);
let staff = document.querySelector('.floating');

let element7 = document.querySelector("#staff p");
observer7.observe(element7);

function onEntry7(entry7) {
  if (entry7[0].isIntersecting) {
    staff.classList.add("show-bottom");
  }
}

CSS

.floating {opacity: 0; transition: 1s opacity;}
.floating.show-bottom {opacity: 1;  
  animation: movefromtop 1s alternate infinite;
  animation-iteration-count: 1;
  animation-fill-mode:  forwards;}
@keyframes movefromtop {
  from {
    transform: translateY(-5em);
  }
  to {
    transform: translateY(0em);
  }
}

Use 查询选择器全部() https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll获取所有内部 div 元素,然后使用forEach打电话给你的observer.observe()所有元素的方法。然后在观察者中,使用target属性来查询内部图像并添加show-bottom类给它。

要在每个动画之间添加延迟,您必须通过返回创建动画链Promise并使用setTimeout()。如果同一元素多次触发相交,还要确保在动画中不要多次链接同一元素。为此,使用数组animatedElements跟踪正在动画化的元素。

如果您只想对元素进行一次动画处理,则在开始相交后,您可以调用unobserve让您的观察者从进一步的交叉口事件中注销。

注意:我编辑了您的 HTML/CSS 以使网格在代码片段中工作,以演示多个元素位于同一行时的顺序动画效果。我还添加了一个with-img类到内部 div,以便我们可以查询它们并将它们传递给观察方法。

const onEntry7 = animateSequence('.floating', 'show-bottom');
const observer7 = new IntersectionObserver(onEntry7);
const allElements7 = document.querySelectorAll('#staff div.with-img');
allElements7.forEach(e => observer7.observe(e));

function animateSequence(targetSelector, classToAdd, delay = 500) {
  const animatedElements = [];
  let chain = Promise.resolve();

  function show(e) {
    return new Promise((res, rej) => {
      setTimeout(() => {
        e.classList.add(classToAdd);
        res();
      }, delay);
    });
  }
  return function(entries) {
    entries.forEach(entry => {
      if (entry.intersectionRatio > 0) {
        const elem = entry.target.querySelector(targetSelector);
        if (!animatedElements.includes(elem)) {
          animatedElements.push(elem);
          console.clear();
          console.log('chaining', ...animatedElements.map(e => e.getAttribute('data--name')));
          chain = chain.then(() => show(elem));
          observer7.unobserve(entry.target);
        }
      }
    })
  }
}
.floating {
  opacity: 0;
  transition: 1s opacity;
  width: 157px;
  height: 220px;
}
.floating.show-bottom {
  opacity: 1;  
  animation: movefromtop 1s alternate infinite;
  animation-iteration-count: 1;
  animation-fill-mode:  forwards;
}
@keyframes movefromtop {
  from { transform: translateY(-5em); }
  to { transform: translateY(0em); }
}
section#staff {
  margin-top: 200px;
  margin-bottom: 200px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
Scroll Down
<section id="staff" style="padding-top: 100px;">
  <div class="col-lg-12 mx-auto mb-5">
    <div class="container">
      <div class="row icons-info">
        <div class="with-img col-xs-12 col-xs-6 col-sm-6 col-md-6 col-lg-3">
          <img class="floating" src="https://lagaleramagazine.es/rucab/img/Muñeco 1-08.png" data--name="1">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros. </p>
        </div>
        <div class="with-img col-xs-12 col-xs-6 col-sm-6 col-md-6 col-lg-3 ">
          <img class="floating" src="https://lagaleramagazine.es/rucab/img/Muñeco 2-08.png" data--name="2">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros.</p>
        </div>
        <div class="with-img col-xs-12 col-xs-6 col-sm-6 col-md-6 col-lg-3 ">
          <img class="floating" src="https://lagaleramagazine.es/rucab/img/Muñeco 3-08.png" data--name="3">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros.</p>
        </div>
        <div class="with-img col-xs-12 col-xs-6 col-sm-6 col-md-6 col-lg-3">
          <img class="floating" src="https://lagaleramagazine.es/rucab/img/Muñeco 1-08.png" data--name="4">
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nibh justo, tincidunt sed felis vitae, egestas scelerisque eros. </p>
        </div>
      </div>
    </div>
  </div>     
</section>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Intersection Observer API 延迟翻译元素 的相关文章

  • jQuery 选择器定位具有 id AND class 的元素不起作用

    我有以下事件处理函数 jQuery document on click button submitb function e alert jQuery 包含在 html 文档中 但是 如果我点击 div class submitb Go di
  • 三.js环境光意想不到的效果

    在下面的代码中 我渲染了一些立方体并使用点光源和环境光照亮它们 然而 当设置为 0xffffff 时 AmbientLight 会将侧面的颜色更改为白色 无论其指定的颜色如何 奇怪的是 点光源按预期工作 我怎样才能使环境光表现得像点光 因为
  • Chrome JavaScript 日期构造函数获取 1884 年之前的日期似乎是错误的

    如果我将 1 1 1753 午夜 的 unix 毫秒时间戳值 6847786800000 传递给 Chrome 中的 JavaScript Date 构造函数 则 Chrome 给出的日期看起来非常奇怪 当我使用带有七个参数的 Date 构
  • 修剪日期格式 PrimeNG 日历 - 删除时间戳、角度反应形式

    我将以下内容推入我的反应形式 obj 中2016 01 01T00 00 00 000Z但我想要以下2016 01 01 有谁知道有一个内置函数可以实现上述目的 我已经搜索过文档here https www primefaces org p
  • Next.js:如何将 source-map-explorer 与 Next.js 一起使用

    我想分析我的 Next js 构建源地图浏览器 https www npmjs com package source map explorer 有人可以帮我编写脚本吗 对于 React CRA 我使用以下脚本 build analyze n
  • 如何在美人鱼节点描述中添加链接?

    我想 如下图所示 div class mermaid graph TD A hello B an b important b link A gt B div 在下面添加实际链接link指向http google com 我尝试将相关节点修改
  • 动态更改 vuejs 2 中的选择输入选项

    如何动态更改选择下拉 v model 中的选项 我有 2 个选择输入 其中一个应该根据其他输入进行更改 例如 如果我选择 水果 则选择显示水果 如果我选择 蔬菜 则选择显示蔬菜 我不使用Vuejs 但查看文档后 var TypesArr F
  • Intro.js 2页然后返回首页

    我在用intro js http introjs com 为我的网站创建一个小介绍 我希望游览从第 1 页 主页 2 另一页 然后回到第 1 页 主页 我已经成功地从第 1 2 页开始 但不确定如何让它返回到第 1 页 我对 javascr
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 以 HTML 格式发送电子邮件

    我想发送 HTML 格式的电子邮件 如下图所示 我怎样才能做到这一点 请帮我 提前致谢 String body new String table tr td br header td tr br br Get b Best Score b
  • 加载背景图像的图像不显示

    我真的很困惑 我正在尝试创建一个带有图标和一些按钮的登陆页面 但我无法设法使我正在使用的背景图像显示出来 即使它是根据 Chrome 的开发工具包加载的 我只有这些行 索引 html div class row div class tryh
  • 如何使用 jest 通过 Promise.all 设置多次提取测试

    我在测试中使用 jest 我正在使用 React 和 Redux 并且执行以下操作 function getData id notify return dispatch gt dispatch anotherFunction Promise
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • Facebook API Javascript JSON 响应

    function getUser FB api me function response console log Response is response alert Your name is response first name ale
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • 在firefox上用js改变表单方法

    我需要使用 javascript jQuery 或纯 更改表单的方法属性 我的表单有 method post 我尝试用以下方法更改它 submit button click function var url input id url val
  • JsGrid 将嵌套对象加载到表中

    我正在 Django 中开发一个 Web 项目并使用 jsGrid 我遇到了问题并且找不到解决方案 我有一个嵌套的 JSON 数据 它是通过组合多个数据库表记录创建的 这是我的 JSON count 3 results personnel
  • 如何在 Firefox 插件中追加到文件?

    var tabs require sdk tabs var iofile require sdk io file var widgets require sdk widget var selection require sdk select
  • Javascript/jQuery 外部高度()

    Does idOfLememt outerHeight 对所有浏览器产生相同的结果 IE7 有什么不同吗 只要去http api jquery com outerHeight http api jquery com outerHeight

随机推荐

  • .NET 错误关闭串口 BaseStream 错误仅在端口打开时出现

    我正在使用 NET System IO Ports SerialPort 并按照本文中的建议使用 BaseStreamIf you must使用 NET System IO Ports SerialPort http www sparxen
  • 对角块矩阵行之间的组合列表

    我有以下 R 矩阵 它是 2x3 和 3x3 子矩阵的组合 它可以是 2 个以上具有不同维度的子矩阵 例如 m1xp 和 m2xp 和 m3xp 其中 m1 m2 m3 A2 lt list rbind c 1 1 1 c 1 1 1 rb
  • 曲面细分的理论和算法

    我有以下问题 以下是我在屏幕上绘制立方体的方法 void drawCube glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear color and depth buffers glPu
  • A* 寻路不采用最短路径

    我的 A 寻路功能总是能到达预期目的地 但它几乎总是有点偏离路线 这是一个例子 我制作了一张漂亮的图片来展示我的问题 但显然直到我的声誉达到 10 后它才会发布 抱歉 我是新人 P 本质上 它会尽可能向左或向上拉动 而不实际向路径添加更多图
  • ggplot:如何用箭头连接图表中的某些条形

    目前我正在复制 更新海报演示的某些图形 我成功地复制了图形的颜色 值 条形样式和背景 但是缺少一个箭头标签 突出显示了值差异 我想知道是否有通过 ggplot 线条或箭头 的有用选项 值得付出努力 或者我必须用另一个图形软件绘制一些箭头 这
  • 到凸包的距离

    我一直在寻找一种方法来计算到凸包 多边形的距离 如果该点在包内 则距离为正 如果在包外 则距离为负 例如 给定一个船体和一组点 可以计算正 负距离吗 from scipy spatial import ConvexHull import m
  • 如何将 Solr 索引转储/备份到文件?

    我正在运行一个虚拟专用服务器 每天午夜 所有文件都会自动备份由 VPS 提供商提供 所以我需要exportSolr 索引到文件 这样如果有一天出现问题 我将能够import它轻松返回到 Solr 我怎样才能做到这一点 Solr 数据库是一个
  • 使用 QLabel 在 PyQt GUI 中显示 gif

    我试图在按下按钮后显示加载 gif 这是我目前拥有的代码 import sys from PyQt4 import QtGui QtCore from PyQt4 QtCore import from PyQt4 QtGui import
  • 子进程 check_output 返回非零退出状态 1

    这是我的Python代码 import subprocess subprocess check output ls shell True stderr subprocess STDOUT import subprocess subproce
  • 如何知道文字的方向?

    在 UITextView 中输入时 我需要根据键盘的语言了解文本的方向 例如 如果用户输入英语 则方向将为 从左到右 如果用户输入阿拉伯语 则方向将为 从右到左 我毫无疑问地需要这个值 并避免对每种语言及其文本方向之间的匹配进行硬编码 这可
  • LESSCHARSET=utf-8 less 似乎不起作用

    我正在尝试查看 UTF 8 文本文件 流less 即使我像这样调用它 cat file LESSCHARSET utf 8 less 非 ASCII 兼容的 UTF 8 字符无法正确显示 相反 它们的十六进制值在括号中突出显示 例如
  • Java 构建路径 - 添加外部 JAR 并添加变量

    Java 构建路径 添加外部 JAR 按钮和添加变量按钮功能之间有什么区别 为什么需要它 请详细解释一下 两者都可以用来实现相同的目标 将 JAR 添加到构建路径中 假设您有一个项目 P1 想要使用供应商 S1 安装的 JAR 该 JAR
  • Java 8 过滤器映射 >

    如何过滤一个Map
  • iPhone 上的 CoreMotion 碰撞与震动

    我正在尝试检测用户何时将 iPhone 撞到另一个物体上 以及何时只是摇晃手机 我似乎无法让它按照我想要的方式完美工作 因为它要么记录太多颠簸 要么没有颠簸 或者认为摇晃就是颠簸 有人可以看看我下面的代码并提供建议吗 我需要确保其中之一发生
  • 当由 router-outlet 创建组件时,如何为组件设置输入绑定?

    当路由器创建组件时 如何设置属性绑定 不支持对路由器添加的组件使用绑定 另请参阅此讨论https github com angular angular issues 4452 https github com angular angular
  • TypeORM:PostgreSQL 中自动生成的 UUID

    我正在编写一个 REST API 对于数据访问 我正在使用 typeorm 我已经成功使用了它 但我希望在我的一个表上有一个 UUID 自动生成的主键 有谁知道如何在 typeorm 中设置 UUID 类型并自动生成的列 我尝试了以下操作
  • 安卓。内存不足问题

    我需要在我的应用程序中显示许多图像 这些是 jpg 和 png 我将它们加载到 ImageView 中 如下所示 tile setImageResource R drawable tile highlight 我目前遇到内存不足问题 jav
  • 追加后访问元素

    我需要在 JQuery 追加后访问 DOM 元素 假设我有这个 ul li class item one li li class item two li ul 然后是 JavaScript var addItems function htm
  • 当 .CSV 的值之一可能在字符串中包含逗号时处理 .CSV

    我有一个 csv 需要将其转换为 Coldfusion 查询 我使用了 cflib org CSVtoQuery 方法 效果很好 但是 如果 csv 中有一个 单元格 在字符串中包含逗号 例如列表 则该记录的查询行会变得混乱 因为它将字符串
  • 使用 Intersection Observer API 延迟翻译元素

    我在用着路口观察器 API https developer mozilla org en US docs Web API Intersection Observer API当用户滚动到内容时显示元素 效果很好 但我想要延迟显示 div 如果