Javascript 如何在平滑滚动到散列时停止丢失正确的位置/url

Javascript 如何在平滑滚动到散列时停止丢失正确的位置/url,javascript,jquery,Javascript,Jquery,好的,我有几个问题。。。我正在用bootstrap/jquery构建我的站点。我使用引导nav,所有nav链接都是指向同一页面上不同容器的散列链接 问题1 当使用下面的方法“劫持”链接时,我丢失了URL地址,因此人们可以抓取链接并稍后共享或链接到它 问题2 还有一些其他页面的内容不在主页上。所以很明显,当用户点击链接/somepage/photography时,是不起作用的。这里唯一不使用相对链接的解决方案是什么 <nav> <a href="#photography"&g

好的,我有几个问题。。。我正在用bootstrap/jquery构建我的站点。我使用引导nav,所有nav链接都是指向同一页面上不同容器的散列链接

问题1 当使用下面的方法“劫持”链接时,我丢失了URL地址,因此人们可以抓取链接并稍后共享或链接到它

问题2 还有一些其他页面的内容不在主页上。所以很明显,当用户点击链接/somepage/photography时,是不起作用的。这里唯一不使用相对链接的解决方案是什么

<nav>
  <a href="#photography">Photography</a>
</nav>

// smooth scroll from navigation
$('nav a').click(function(evt){
  evt.preventDefault();
  var $section = $($(this).attr('href'));
  scrollToObject($section);
});
问题1:丢失URL末尾的哈希的原因是调用evt.preventDefault阻止添加哈希

我不能100%确定scrollToObject中滚动效果的内部工作原理,但如果您可以在滚动完成时提供回调函数,则可以添加location.assign evt.target.hash;当然,您可以从锚对象、事件等获取哈希值

您可以在这里阅读关于MDN上js中的位置接口:

问题2:您可以使用location.assign再次完成此任务。同样,在不查看所有代码的情况下,您可以在回调中创建一个条件,然后使用滚动定位将用户发送回页面:location.assign location.origin+'/'+evt.target.hash。

还包括函数scrollToObject。可能最好是制作一个小提琴/片段,供我们玩/试验