javascript - $.getscript 在使用 swup 库时创建多个调用
问题描述
对于那些不熟悉的人,我正在使用一个名为 swup 的库来使用 CSS 创建页面过渡。回购和信息在这里:https ://github.com/gmrchk/swup
这本质上是 ajax 转换的替代方案,我觉得它非常有趣并且更容易在我的投资组合网站上使用。
我的问题是,当通过 swup 加载新内容时,我需要加载我的脚本文件。我目前正在使用 jQuery 来加载我的脚本文件。使用来自 swup 的事件调用 $.getscript 函数,称为“swup:contentReplaced”:
document.addEventListener('swup:contentReplaced', event => {
$.getScript("/js/main.js");
});
这样做的问题是,这会产生某种错误,使 swup 创建的每个调用加倍。所以下一次 'swup:contentReplaced' 事件发生时,main.js 文件会被调用两次。然后4次。然后是 8,以此类推。
这当然会破坏性能,并且几乎会使计算机冻结。通过页面上的 swup 加载内容时调用该 js 文件的更好方法是什么?
解决方案
显然,您main.js
更改了内容,因此两次重新宣传该活动。
一种选择是,在标记为的 html 中添加全局字段false
,然后深入研究您main.js
发现的代码段,这会导致您遇到麻烦,例如,
//In HTML
<data style="display:none" id="flag" value="0" />
//In main.js
$('#flag').val("1");
//...Part causes trouble
$('#flag').val("0");
//eventListener
document.addEventListener('swup:contentReplaced', event => {
if $('#flag').val() == "0"{
$.getScript("/js/main.js");
}
});
但这可能无法解决问题,因为您可能会发现定位有问题的部分有些麻烦(比如说)。
然后,更方便的方法是使用once
document.addEventListener('swup:contentReplaced', event => {
$.getScript("/js/main.js");
}, {once:true});
在最后main.js
,还要添加这一行。
因此每次你只能调用$.getScript("/js/main.js");
一次,并且在你执行之后main.js
,你添加回事件。
推荐阅读
- python - 用Beautiful Soup在字体大小下提取文本
- javascript - 何时以及如何使用匿名函数
- excel - 将两个范围按行连接为一个
- jquery - 导航栏活动选项在加载页面后不会保持活动状态
- c - 在 Linux 上使用 C 语言调用 sysctl() 的示例
- git - 克隆存储库时突然添加工作树参数
- reactjs - 应该如何编写反应页面中的脚本标记以将其正确包含在 webpack 中?
- javascript - document.queryselectorall 不适用于多个类 javascript
- c# - 按 id 从数据库中加载行
- selenium-webdriver - 在 Jmeter 中停止 Selenium WebDrvier 测试