gpt4 book ai didi

javascript - DOM 渲染后在 React 中执行 Vanilla JS 脚本

转载 作者:行者123 更新时间:2023-12-02 01:54:26 24 4
gpt4 key购买 nike

我苦苦挣扎了 5 个小时才摆脱这个问题,我已经放了一些 <script> index.html 中的标签文件位于 public文件夹。我希望它们在浏览器完全渲染 HTML 后执行,我知道这是一个非常基本的问题,但问题是,我正在将 HTML 模板转换为 React,并且它大量使用动画,这是我无法承受的从头开始再次写入react。这是我的代码

<!DOCTYPE html>
<html lang="en">
<head>
<title>Galaxy App</title>

<!--CSS-->
<link href="asset/css/icofont.min.css" rel="stylesheet" />
<link href="asset/css/linearicons.min.css" rel="stylesheet" />
<link href="asset/css/magnific-popup.min.css" rel="stylesheet" />
<link href="asset/css/animsition.min.css" rel="stylesheet" />
<link href="asset/css/bootstrap.min.css" rel="stylesheet" />
<link href="asset/css/swiper.min.css" rel="stylesheet" />
<link href="asset/css/styles.css" rel="stylesheet" />
<link href="asset/css/main.css" rel="stylesheet" />
<link href="asset/css/homepage.css" rel="stylesheet" />


<!--Theme CSS-->
<link href="asset/css/theme.css" rel="stylesheet" />
<link href="asset/css/responsive.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
</head>
<body>
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.js"></script>

<script src="asset/js/polyfill.min.js"></script>
<script src="asset/js/jquery.min.js"></script>
<script src="asset/js/jquery.viewport.min.js"></script>
<script src="asset/js/jQuerySimpleCounter.min.js"></script>
<script src="asset/js/jquery.magnific-popup.min.js"></script>
<script src="asset/js/animsition.min.js"></script>
<script src="asset/js/isotope.pkgd.min.js"></script>
<script src="asset/js/bootstrap.bundle.min.js"></script>
<script src="asset/js/rellax.min.js"></script>
<script src="asset/js/swiper.min.js"></script>
<script src="asset/js/smoothscroll.js"></script>
<script src="asset/js/svg4everybody.legacy.min.js"></script>
<script src="asset/js/TweenMax.min.js"></script>
<script src="asset/js/TimelineLite.min.js"></script>
<script src="asset/js/typed.min.js"></script>
<script src="asset/js/vivus.min.js"></script>
<script src="asset/js/main.js"></script>
<!-- Theme JS -->
<script src="asset/js/theme.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.js"></script>
<script src="asset/js/cutsom.js"></script>
</body>
</html>

我通过记录document.getElementById()手动检查在最后一个脚本中,它返回 undefined/null,因为此时 HTML 尚未完全呈现,即使我已将脚本放在文件末尾。如果我添加 setTimeout 就可以了在我的脚本中,它完美地捕捉了元素。

那么我应该怎么做才能在我的 HTML 完全渲染后才加载所有脚本。

最佳答案

实现此目的的一种方法是发出 Event来自 react 。

将其添加到您的主要 react 组件中:

useEffect(() => {
const event = new Event('rendered')
document.dispatchEvent(event)
}, [])

监听页面上的事件:

<script>
document.addEventListener('rendered', function() {
// start animation
}, false)
</script>

关于javascript - DOM 渲染后在 React 中执行 Vanilla JS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69790295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com