ScrollTo:定位导航栏中的特定按钮

ScrollTo: targeting specific buttons in a navbar

我为 WordPress 网站创建的导航栏出现问题。有些 links 是为了向下滚动到主页上的不同位置,有些在 links 之外滚动到网站上的其他地方。像这样:

<div class="main-navigation">
    <ul>
        <li class="link1"><a href="page1.html">Link 1</a>
        <li class="link2"><a href="#link2">Link 2</a>
    </ul>
</div>

基本内容。

所以如果我在页脚中添加以下 Javascript....

jQuery(document).ready(function() {

jQuery('.main-navigation a' ).click(function(){
  jQuery.scrollTo( this.hash, 1000, { easing:'swing' });
  return false;
});

Link 2 将向下滚动,但由于 Link 1 不应该滚动,如果您单击它,则不会发生任何事情,就像它是 null link.

我想我可以将引用更改为

jQuery('.main-navigation a.link2' ).click(function(){

所以只有 link 2 会滚动,但这只会让它像 1990 年代的旧锚标记技巧一样跳转到页面。

尝试了同一想法的几种变体,但没有任何效果。谁知道只针对需要滚动的按钮的正确代码是什么?

根据 itsgoingdown 的 回答构建。动画被忽略,因为默认的 link 事件仍然触发。如果您通过该事件并防止默认设置,您将被设置。见下文。

$(document).ready(function() {
    $('.main-navigation a[href^="#"]' ).click(function(event) {

        // Prevent default link action
        event.preventDefault();

        // Grab location to send to
        var href = $(this).attr('href');

        // Scroll the page, animated
        $('html, body').animate({
            scrollTop: $(href).offset().top  
        }, 700);

    });
});

这里还有一个要展示的实时 JSFiddle。 https://jsfiddle.net/y3nutj22/5/

谢谢你们。我终于想通了,从某种意义上说,你们都是对的。但是,您的代码都没有产生 scrollTo 效果。虽然 '.main-navigation a[href^="#"]' 部分正确,但我的问题....今天早上我终于意识到了...我是否在 URL 中进行了硬编码在 WordPress 的菜单功能中作为一个完整的 URL。所以只使用“#”是行不通的。另外,由于是WP,我不能在代码中使用$,当然不能使用jQuery。

这是成功的代码。

 jQuery(document).ready(function() {

jQuery('.main-navigation a[href^="http://path.to.url/#"]' ).click(function(){
  jQuery.scrollTo( this.hash, 1000, { easing:'swing' });
  return false;
});

与 path.to.url 代表实际 URL,当然。

再次感谢!