1

这是我的困境。我有从一个页面到另一个页面的三个链接,并将访问者带到其各自的 DIV id:

www.mysite.com/#about
www.mysite.com/#gallery
www.mysite.com/#help

它工作正常,但我真的需要从 URL 中删除尾随的主题标签,否则它会与 jquery 库滑块混淆。这可能吗?我见过其他人问过类似的问题,但他们似乎没有导航到新页面。

我正在寻找的是一种让访问者单击链接(例如,www.mysite.com/#about)并被带到该页面(和相应的元素)但让浏览器修剪掉#about并只报告的方式www.mysite.com

Jquery,PHP,javascript,我真的不在乎什么。

我在想另一种选择是将用户带到 www.mysite.com,然后应用主题标签。这是可能吗?就这样它们被带到元素,但浏览器中的 url 不反映主题标签。

PS:我不是编码员,所以如果有一些代码可以做到这一点,你们能否真正清楚如何实现?

非常感谢。

4

2 回答 2

1

我们可以使用history api.

首先,我们检查堆栈中是否存在状态。无论状态是什么,都将是我们推入堆栈的最新项。

我们假设id元素的 与 相同hash。我们将它用作我们的选择器div并获取 divs offset().top

if(history.state){  
    $('html, body').scrollTop($('div[id='+history.state.element+']').offset().top); 
}

现在让我们看一下点击功能。我们阻止默认行为并将 href 存储在变量中(因为我们将使用它几次)。我们将一个状态压入堆栈。键的element值为whatever comes after the hash tag。我们还提供了一些关于堆叠状态的其他信息。完成后,我们只需将页面位置重定向到元素的without哈希标记位置。

$('a').on('click', function(e){
    e.preventDefault();

    var ele =  $(this).prop('href');
    window.history.pushState({'element' : ele.split('#')[1]}, ele, ele.split('#')[0]);

    window.location = ele.split('#')[0]; 
});

现在,当下一页加载时,历史将有一个状态,这将是最近推送的堆栈。这将模拟您想要的行为。

于 2013-01-02T10:23:03.340 回答
0

这是 jQuery 中一个不错的解决方案:

http://demos.flesler.com/jquery/scrollTo/

于 2013-01-02T10:07:09.237 回答