我在tumblr上使用gumroad.js,无限滚动
<script type="text/javascript" src="https://gumroad.com/js/gumroad.js"></script>
这会在按钮点击时创建一个叠加检查(模态)窗口。对于前15个帖子,它加载正常。但是,一旦其余按钮加载无限滚动,它们就不会加载js功能。
该脚本位于页面<head>
我是否需要在无限滚动的每次回调中重新加载文件?:function(newElements) {
修改
我刚注意到无限滚动后,soundcloud播放器也在消失。这些都是自定义类。它们出现在检查器中,因为这些类仍处于机智状态,但是js文件没有得到处理。
答案 0 :(得分:1)
已知无限滚动会导致脚本出现问题。是的,你可能需要在每次加载页面后在回调中重新初始化Gumroad。我对Gumroad了解不多,但快速搜索了
Gumroad.init()
作为重新初始化代码的方法。
如果我错了,有人可以纠正我,但在回调中放这一行应该有效!
修改强>
我们无法阻止Gumroad.js在每次运行init()
后创建重复按钮,因此我们只需要擦除所有按钮并让它们重新初始化。也无法取消附加点击处理程序,因此您需要克隆锚点以将其删除。在每次无限滚动回调之后,您将需要运行此代码以将所有gumroad链接恢复正常,然后调用Gumroad.init()
重新初始化。我不确定你是否使用jQuery,但如果是这样,这是最简单的方法。
使用their demo作为模型:
<强>的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()
不会删除文本节点,因此在克隆(最佳)后,只会删除按钮的“图标”部分。
如果您使用的是vanilla javascript,则需要在克隆后复制文本节点(“购买我的产品”)。但是,不要使用DOM Node.cloneNode
方法深度克隆(克隆所有子元素)(通过将true
传递给.cloneNode(true)
来克隆锚点,然后删除不必要的子元素(即图标),就像jQuery方式一样,你只需要浅层克隆锚点,然后复制文本。
同样,我们需要克隆并替换锚链接元素以摆脱重复的点击处理程序,否则当您单击按钮时,它将实际执行两次Gumroad叠加模式。