【问题标题】:Link to anchor on different page from WP nav链接到来自 WP 导航的不同页面上的锚点
【发布时间】:2017-09-01 01:35:10
【问题描述】:

我有一个导航栏,可以链接到起始页上的不同锚点。当我使用起始页导航中的链接时,它会平滑滚动到正确的 ID。但是当我转到子页面/其他页面时,我希望导航栏将我直接发送回起始页和选择的 ID(锚点)。我认为平滑滚动 javascript 存在一些冲突,但我可能是错的。

我的自定义 WP 主题的名称是:fitnesstravels。​​

导航栏由来自 Wordpress 菜单的自定义链接组成:

网址:http://localhost:8080/fitnesstravels/#destinations

名称:目的地

当我转到子页面时:http://localhost:8080/fitnesstravels/destinations/rhodos

导航栏中名为“目的地”的菜单链接链接到http://localhost:8080/fitnesstravels/#destinations 锚点(如果我右击“在新选项卡中打开链接”我会发送到正确的位置。但是当我尝试简单地使用时没有任何反应菜单链接。

js:

$('.nav.navbar-nav a, .arrow a[href^="#"]').on('click',function (e) {
     e.preventDefault();
     var target = this.hash,
     $target = $(target);
     $('html, body').stop().animate({
          'scrollTop': $target.offset().top-50
     }, 1200, 'swing', function () {
          window.location.hash = target;
     });
});

【问题讨论】:

  • 我真的不明白你想要达到什么目的或问题是什么..
  • 问题是当我在子页面上时,我的导航不会将我发送回我的首页和正确的#anchor。当我单击菜单/导航中的链接时没有任何反应。但是如果我在我的首页上,导航会起作用并滚动到正确的锚 div。
  • 好的,你能像这样 $('.nav.navbar-nav a[href*="#"]').on(...);跨度>
  • 是的,javascript 用于在我的所有导航栏链接上产生“平滑滚动”效果,它适用于“登陆页面”。但我认为滚动脚本使链接在子页面上不起作用。但我可能错了。而且我不知道如何解决这个问题。
  • 你能把网站放在实时服务器上让我看看吗?

标签: javascript html wordpress


【解决方案1】:

问题是e.preventDefault()

我已经完全按照您在网站上尝试的方式完成了,并且以您描述的相同方式,唯一显着的区别是我的平滑滚动 jQuery 不使用 preventDefault

这是(相关部分)我的平滑滚动 jQuery:

var $root = $('html, body');

$( ".navbar" ).on( "click", "li a", function(  ) {
    var pageanchor = this.hash;
    if (pageanchor)
        $root.animate({ scrollTop: $(pageanchor).offset().top}, 500);
});

如果我更改代码以使用您的变量名称和动画设置,除了preventDefault 之外,它几乎与您的相同。

$(document).ready(function() {
    $('.nav.navbar-nav a, .arrow a[href^="#"]').on('click',function (e) {
        var target = this.hash;
        if (target)
            $('html, body').animate({ 
                scrollTop: $(target).offset().top-50
            }, 1200, 'swing', function () {
                window.location.hash = target;
        });
});

【讨论】:

  • 是的,我反对 preventDefault 是问题所在。但即使我从我的 js 中删除 e.preventDefault();,问题仍然存在。除非我在首页,否则菜单链接将不起作用。
  • 猜猜我的浏览器更新 scroll.js 的速度不够快:P 现在它就像一个魅力!谢谢@FluffyKitten
猜你喜欢
  • 2016-09-08
  • 2020-04-05
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2020-04-29
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多