当哈希没有明显改变时,我如何强制 iron-router 做出反应?
How do I force iron-router to react when the hash has not apparently changed?
当使用 iron-router 滚动到使用引用下一节 ID 的锚按钮的哈希时,例如:
<a class="button" href="{{pathFor 'home' hash='about'}}">
iron-router 会在第一次点击按钮时愉快地将我们带到关于部分。
如果您使用鼠标向上滚动并再次单击同一个按钮,则不会发生滚动。
我推测这是因为目的地显然与当前路由器位置相同,因此不会触发任何反应。
我怎样才能强制反应?
我已经尝试在覆盖 scrollToHash 函数时清除 window.location 中的哈希值:
Router._scrollToHash = function(hash) {
var section = $(hash);
if (section.length) {
var sectionTop = section.offset().top;
$("html, body").animate({
scrollTop: sectionTop
}, "slow");
}
window.location.hash = '';
};
这允许第二次点击但不能再点击,这让我很困惑。
将 window.location.hash 设置为 space 而不是空字符串有效:
Router._scrollToHash = function(hash) {
var section = $(hash);
if (section.length) {
var sectionTop = section.offset().top;
$("html, body").animate({
scrollTop: sectionTop
}, "slow");
}
window.location.hash = ' ';
};
可能将其设置为不存在的散列也会。
除了包含可以从第二页激活的菜单 link 以将您带到哈希的情况外,您还需要这个包:
meteor add okgrow:iron-router-autoscroll
结合使用它涵盖了我想到的所有情况。
当使用 iron-router 滚动到使用引用下一节 ID 的锚按钮的哈希时,例如:
<a class="button" href="{{pathFor 'home' hash='about'}}">
iron-router 会在第一次点击按钮时愉快地将我们带到关于部分。
如果您使用鼠标向上滚动并再次单击同一个按钮,则不会发生滚动。
我推测这是因为目的地显然与当前路由器位置相同,因此不会触发任何反应。
我怎样才能强制反应?
我已经尝试在覆盖 scrollToHash 函数时清除 window.location 中的哈希值:
Router._scrollToHash = function(hash) {
var section = $(hash);
if (section.length) {
var sectionTop = section.offset().top;
$("html, body").animate({
scrollTop: sectionTop
}, "slow");
}
window.location.hash = '';
};
这允许第二次点击但不能再点击,这让我很困惑。
将 window.location.hash 设置为 space 而不是空字符串有效:
Router._scrollToHash = function(hash) {
var section = $(hash);
if (section.length) {
var sectionTop = section.offset().top;
$("html, body").animate({
scrollTop: sectionTop
}, "slow");
}
window.location.hash = ' ';
};
可能将其设置为不存在的散列也会。
除了包含可以从第二页激活的菜单 link 以将您带到哈希的情况外,您还需要这个包:
meteor add okgrow:iron-router-autoscroll
结合使用它涵盖了我想到的所有情况。