Jquery 在锚链接上平滑滚动

Jquery 在锚链接上平滑滚动,jquery,Jquery,我尝试使用jQuery在网站中创建平滑的滚动。这就是我目前使用的代码: (function(jQuery) { jQuery(document).ready(function() { jQuery(function() { jQuery('nav a').bind('click',function(event){ var anchor = jQuery(this);

我尝试使用jQuery在网站中创建平滑的滚动。这就是我目前使用的代码:

(function(jQuery) {    
    jQuery(document).ready(function() {


            jQuery(function() {
                jQuery('nav a').bind('click',function(event){
                    var anchor = jQuery(this);
                    console.log(anchor.attr('href'));

                    jQuery('html, body').stop().animate({
                       scrollTop: (jQuery(anchor.attr('href')).offset().top - 95)
                    }, 1500,'linear');
                    event.preventDefault();
                });
            });
    });
}(jQuery));
然而,锚是整个链接,如www.mydomain.com/myanchor,显然,它不起作用。我想用这样的东西来获取锚id:

anchor = anchor.substring(anchor.indexOf("#")+1);
但是,我可能会与不在同一页面上的链接发生冲突和控制台错误。这足够了吗?还是我应该用另一种方法


另外,并非我导航系统中的每个a都有锚定链接。有些页面有指向其他页面的完整链接。

可能您只希望使用同一页面上的锚来执行此操作,因此相关链接应以开始。编辑:但你说过他们可能会从页面URL开始

不是我导航中的每个a都有锚定链接

因此,首先我们必须过滤掉这些,这很容易:

请注意,StringStartWith可能需要一个垫片用于非尖端浏览器,但垫片很小。

或者更好的是,只需首先选择它们:

var loc = location.toString().split("#")[0];
jQuery('nav a[href^="#"], nav a[href^="' + loc + '#"]').bind(...
…它查找a href=blah和a href=http://my.website.com/blah 假设当前URL为http://my.website.com/.

我在想用这样的东西来获取主播id

anchor = anchor.substring(anchor.indexOf("#")+1);
既然我们过滤掉了不相关的链接,那就行了。但请注意,在代码中,锚点是一个jQuery对象,但您将其视为字符串。相反:

var href = anchor.attr("href");
href = href.substring(href.indexOf("#")+1);
…然后我们可以使用href作为id选择器:

var targetElement = $(href);
由于存在,它变成了一个id选择器,我们可以直接使用href查找它,例如,foo是href,也是目标元素的id选择器

旁注:bind是一种古老的方式,虽然还没有被弃用,但很可能会被弃用。这是新的方式


旁注2:通过阻止默认设置,您可以阻止URL更改,例如,新的哈希,这意味着如果人们将其添加到书签中,他们将没有正确的哈希。

jQuery'nav a[href^=]将只生成以,我认为这应该是你想约束这个听众的唯一链接。当你否决一个问题时,留下一条带有原因的评论,我真的很感激。否则,OP不会理解你为什么这么做,他以后会再这么做。问题是链接不是像我在问题中说的那样开始的。我说锚是整个链接,比如www.mywebsite.com/myanchor。我不能仅使用myanchor添加href,因为它是导航菜单,这些链接在其他页面上无法工作。@Tasos:我在问题中没有看到。你在页面上这么说http://www.mywebsite.com/,你有这样的链接http://www.mywebsite.com/myanchor? 为什么?这只是页面膨胀,使这个过程更加困难。这是主导航菜单。一些链接是主页的锚。其他的为单页。如果我只添加了作为href的myanchor,并在单个页面上单击它,它将不会重定向到该div的主页。@Tasos:如果你链接到另一个页面,你根本无法在from页面上执行此滚动;你必须在目标页面上做,我知道。只有当你点击链接并在主页上时,才会出现滚动效果。当你在另一个页面上时,它只会重定向到主页上的特定div,而不会产生任何效果。这就是为什么我有完整的链接。
var targetElement = $(href);