繁体   English   中英

无限滚动后无法加载外部JS文件的功能

[英]External JS file's functions not loading after infinite scroll

我在tumblr上使用gumroad.js无限滚动

<script type="text/javascript" src="https://gumroad.com/js/gumroad.js"></script>

这将在单击按钮时创建一个覆盖签出(模式)窗口。 对于前15个帖子,它加载正常。 但是,一旦其余按钮加载到无限滚动上,它们就不会加载js功能。

脚本位于页面的<head>

我是否需要在无限滚动的每个回调中重新加载文件?: function(newElements) {

编辑

我只是注意到,在无限滚动之后,soundcloud播放器也消失了。 这些都是自定义类。 它们在检查器中显示为类仍然完好无损,但是未处理js文件。

已知无限滚动会导致脚本问题。 是的,您可能需要在每次加载页面后在回调中重新初始化Gumroad。 我对Gumroad不太了解,但是很快就找到了

Gumroad.init()

作为重新初始化代码的一种方法。

如果我错了,有人可以纠正我,但是将这一行放在回调中应该可以!


编辑:

我们不能阻止Gumroad.js在每次运行init()之后创建重复的按钮,因此我们只需要擦除所有按钮并让它们重新初始化即可。 也没有办法取消附加点击处理程序,因此您需要克隆锚点以将其删除。 在每个无限滚动回调之后,您将需要运行以下代码以将所有gumroad链接设置回正常状态,然后调用Gumroad.init()重新初始化。 我不确定您是否使用jQuery,但如果是这样,这是最简单的方法。

使用他们的演示作为模型:

jQuery的

$('.gumroad-button').each(function() {
    $(this).replaceWith($(this).clone().children().remove().end()); 
});
Gumroad.init();

香草javascript

for (var i = 0, a = document.getElementsByTagName("a"); i < a.length; i++) {
  if (a[i].className.indexOf("gumroad-button") > -1) {
    var clone = a[i].cloneNode();
    clone.appendChild(document.createTextNode(a[i].lastChild.nodeValue));
    a[i].parentNode.replaceChild(clone, a[i]);
  }
}
Gumroad.init();

笔记

选择要删除的子元素后,需要.end()来引用克隆的元素
.remove()不会删除文本节点,因此克隆后(最佳)仅删除按钮的“图标”部分。

如果您使用的是普通javascript,则需要在克隆后复制文本节点(“购买我的产品”)。 但是,而不是使用DOM Node.cloneNode方法(通过将true传递给.cloneNode(true)来克隆锚点,然后删除不必要的子元素(即图标))来进行深度克隆(也克隆所有子元素)这样,您可以只浅克隆锚,然后将文本复制过来。

同样,我们需要克隆并替换定位链接元素,以消除重复的单击处理程序,否则,当您单击按钮时,它将实际上执行两次Gumroad叠加模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM