【发布时间】:2021-08-04 22:50:54
【问题描述】:
TL;DR
"Vanilla-JS 应用程序仅在用户在页面上处于活动状态时执行代码,而 React 组件在组件加载到 DOM 时立即执行代码(即使用户在页面上不活跃)“
我正在开发一个 React 网站并使用“CSS 过渡”创建一个 SVG 动画,该动画通过向元素添加一个类来触发。下面是 React 代码
useEffect(() => {
function startAnimation() {
var wrapper = document.querySelector('svg#logo');
wrapper.classList.add('active');
}
}, []);
我最初在 Vanilla-JS 项目中创建了它(使用 jQuery 的 $(document).ready() 函数),然后将其转换为 React 组件。但我注意到 Vanilla-JS 应用程序中的转换仅在页面处于活动状态时才会启动,而 React 组件会在组件加载到 DOM 时立即启动转换(即使用户在页面上未处于活动状态)。
我知道这是因为我使用了 useEffect 钩子,但是我们如何才能使用 React 获得与 $(document).ready() 相同的行为呢?
下面是 Vanialla-JS 代码
$(document).ready(function () {
function logoDraw() {
var wrapper = document.querySelector('svg#logo')
wrapper.classList.add('active')
}
setTimeout(logoDraw, 10)
});
更新:
- 基于另一个问题的the answer,我使用“焦点”事件侦听器仅在页面处于焦点时才启动动画。但是在这样做之后,如果我重新加载页面并保持在同一页面中,则不会启动转换。只有在我切换标签时才会启动它。
- 我发现了一个 related question,它指出“在第一次加载页面时,它已经有了焦点,因此没有引发任何事件”
【问题讨论】: