javascript - 在反应中使用 IntersectionObserver 更改滚动标题的样式
问题描述
以下代码在简单的 Html 和 JavaScript 中使用 IntersectionObserver 可以很好地根据标题下方部分的可见性来更改标题样式。参考
观察者.js
const header = document.querySelector("header");
const sectionOne = document.querySelector(".home-intro");
const sectionOneOptions = {
rootMargin: "-200px 0px 0px 0px"
};
const sectionOneObserver = new IntersectionObserver(function(
entries,
sectionOneObserver
) {
entries.forEach(entry => {
if (!entry.isIntersecting) {
header.classList.add("nav-scrolled");
} else {
header.classList.remove("nav-scrolled");
}
});
},
sectionOneOptions);
sectionOneObserver.observe(sectionOne);
上面的observer.js 文件以下面index.html 中引用的元素为目标。
索引.html
<header>…Some nav links</header>
<section class="home-intro">...</section>
<script src="js/observers.js"></script>
现在,我想在我的 React 应用程序中实现这个功能。这里的问题是,在上述实现中,observer(sectionOne)和target(header)都在同一个 html 文件中,但在我的 React 应用程序中,observer(some section 或 div)和target(header)位于它们各自的组件中.
那么,我应该在哪个组件中创建这个 IntersectionObserver - Header(target) 组件或具有 section(observer) 的组件以及如何引用另一个组件?
解决方案
推荐阅读
- php - PHP将所有文件放入数组问题
- c# - 当我在同一控制器上使用两个映射路由时,MVC 路由空参数错误
- python - 将 pandas df 从 long 转换为 wide 再转换为稀疏矩阵
- linux - 带有项目列表的makefile过程变量,其中一项是带空格的带引号的字符串
- c# - 为什么我的函数不能连续运行?
- python - 通过比较不同数据框中的其他两列来创建新的数据框列
- docker - 在 docker-compose 文件中添加环境变量作为正则表达式
- python - 如何使用 KNN 估算缺失值
- notepad++ - Notepad++ 或任何其他编辑器:下移一半的行
- android - 如何在反应原生启动活动中添加延迟