gpt4 book ai didi

javascript - 在 Firefox 上使用 popState 平滑滚动和返回按钮 - 需要点击两次

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:59 24 4
gpt4 key购买 nike

我正在尝试实现一个小代码,当我点击 anchor 时( anchor 名称出现在动画之后),我可以通过它实现平滑滚动,如果我按下后退按钮,我想返回到页面顶部浏览器并更新 URL(不带#anchor 名称)。

代码如下:

$(function() {
// Smooth scrolling when clicking on anchor
$('a[href*=#]:not([href=#])').click(function(event) {
event.preventDefault();
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
var hash = this.hash;
$('html,body').animate({ scrollTop: target.offset().top - 55}, 300, function() {
location.hash = hash;
href = window.location.href;
history.pushState({page:href}, null, href);
});
return false;
}
}
});
// Get smooth scrolling to the top whith back button of browser
$(window).bind('popstate', function(event) {
var state = event.originalEvent.state;
var target = window.location.href.split('#');
var href = target[0];
if (state) {
$('html,body').animate({ scrollTop: 0 }, 300, function() {
window.location.href = href;
})
}
});

// First page loading
window.onload = function() {
history.replaceState({ path: window.location.href }, '');
}
});

以上所有功能在 Safari 和 Chrome 下都运行良好。但 Firefox 的情况并非如此:一旦执行了平滑的向下滚动,我需要在后退按钮上单击两次才能重定向到页面顶部。

我看过this other question on stackoverflow并尝试使用和不使用 event.preventDefault,也仅通过放置:

$('html').animate

$('body').animate

但行为是一样的。

如果有人能看出它为什么不起作用。

谢谢

最佳答案

您将在此行中触发其他历史记录更改 location.hash = hash;

所以,我对您的代码做了一些更改,现在它可以在我的 FF 中运行了。

在点击处理程序中,

   $('html').animate({ scrollTop: target.offset().top - 55}, 300, function() {
href = window.location.href;
history.pushState({page:href}, null, href.split('#')[0]+hash);
});

此外,似乎 $('html,body').animate 运行回调两次,因此弄乱了历史记录。这就是为什么我只留下 html。

在 popstate 处理程序中,我删除了页面重新加载,但如果你愿意,你可以保留它:

if (state) {
$('html,body').animate({ scrollTop: 0 }, 300)

关于javascript - 在 Firefox 上使用 popState 平滑滚动和返回按钮 - 需要点击两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35086895/

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