javascript - IntersectionObserver 一次加载所有内容
问题描述
我正在尝试使用 IntersectionObserver 设置文本动画,每次向下滚动时文本进入视口时都会触发文本动画并显示文本。问题是观察者会在第一个列表出现的那一刻加载整个项目动画列表,而无需一直向下滚动......我只希望动画只有在我向下滚动时才会触发..任何使固定 ?
//list -2
let listTargets = [...document.querySelectorAll('.wrapper-1 > ul > li')];
let options = {
root: null,
rootMargin: '-10%',
threshold: 0.2,
};
let observer = new IntersectionObserver(list, options);
function list(entries, observer) {
entries.forEach((entry) => {
// if the element is intersecting do the following
if (entry.isIntersecting) {
//select all spans inside list (variant 2)
let items = [...document.querySelectorAll('.wrapper-1 > ul > li > span')];
// for each item(span with a letter) inside the list we set a timeout P/S/ idx =index of element
items.forEach((item, idx) => {
setTimeout(() => {
// add the active class to each span letter
item.classList.add('active');
}, idx * 10);
});
}
});
}
listTargets.forEach((target) => {
//creat empty string
let newString = '';
//split the text inside span to an array of letters
let itemText = target.children[0].innerText.split('');
//creat each span for each letter if there's a space creat an empty span for it
itemText.map(
(item) =>
(newString +=
item == ' ' ? `<span class="space"></span>` : `<span>${item}</span>`)
);
//put the new string inside list HTML DOM
target.innerHTML = newString;
//observe the target
observer.observe(target);
});
@import url("https://fonts.googleapis.com/css2?family=Rationale&display=swap");
*,
*::after,
*::before {
margin: 0;
padding: 0;
box-sizing: content-box;
}
body {
font-family: "Rationale";
background-color: #161616;
color: #fff;
font-size: 14px;
overflow-x: hidden;
}
.main {
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
.main .title {
font-size: 15em;
text-transform: uppercase;
font-weight: 700;
}
.main .wrapper-1 {
position: absolute;
left: 5%;
top: 100vh;
}
.main .wrapper-1 ul li {
list-style: none;
font-size: 3.5rem;
margin-top: 0.5em;
cursor: pointer;
overflow: hidden;
}
.main .wrapper-1 ul li span {
transform: translateY(100%);
display: inline-block;
text-decoration: none;
text-transform: uppercase;
}
.main .wrapper-1 ul li span.active {
transform: translateY(0%);
transition: 1s ease-out;
}
.main .wrapper-1 ul li span.space {
margin-left: 0.2em;
}
.main .wrapper-1 ul li:hover {
opacity: 0.5;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" href="./style.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div class="main">
<div class="title">welcome</div>
<div class="wrapper-1 title--box-2">
<ul>
<li><span>Him dominion</span></li>
<li>
<span> Shall upon creature created midst him image you. </span>
</li>
<li><span>Heaven. Whose.</span></li>
<li><span>It image open which.R</span></li>
<li><span>Form evening.</span></li>
<li><span>Don't cattle moved.</span></li>
<li><span>Dry, morning.</span></li>
<li><span> May herb.</span></li>
<li><span>Female divided yielding.</span></li>
<li><span> Don't cattle moved.</span></li>
<li><span>Sixth signs blessed.</span></li>
<li><span>Second. Were.</span></li>
<li><span>Sea above.</span></li>
<li><span>Greater. Spirit his.</span></li>
<li><span>Signs lesser. </span></li>
<li><span>First them subdue.</span></li>
<li><span>Was open from.</span></li>
<li><span>Fruit one. </span></li>
</ul>
</div>
</div>
</body>
<script src="./index.js"></script>
</html>
解决方案
推荐阅读
- autodesk-forge - 从 Forge 加载大模型
- android - 关闭应用程序几分钟后未调用android onLocationChanged方法
- sql - SQL-server 中的隐式缺失值到显式缺失值
- html - 尝试使用带有画廊的元素解决 CSS :nth-child 公式
- vsto - VSTO 插件安装程序 - 询问一些用户信息
- node.js - Node.js 从 html 获取值并使用 req.body。
- java - 如何从 Python 客户端订阅 websocket 用户队列?
- alfresco - BPMN 中的决策任务和业务任务有什么区别?如何使用 alfresco 实现决策任务?
- java - 百里香弹簧MVC
- jhipster - JHipster Gateway UI 不是从可执行战争开始的