单击特定链接时,将不同的偏移设置为scrolltop

时间:2014-09-18 09:27:54

标签: javascript jquery

我目前有以下代码可以很好地工作,并在点击链接时滚动到div的顶部...

$(function () {
  $('a[href*=#]:not([href=#])').click(function () {
    if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      if (target.length) {
        $('html,body').animate({scrollTop: target.offset().top}, 1500);
        return false;
      }
    }
  });
});

但是,我想要做的是,当点击一组特定的链接时(#topbannerlinks a),它会滚动到div的顶部但是具有不同的偏移,例如。

$("#topbannerlinks a").click(function(){
    $('html,body').animate({ scrollTop: target.offset().top -180 }, 1500);
});

我可以以某种方式在上面的第一个函数中添加build this function / if语句吗?

我试图这样做,因为我在目标链接页面上有一个不同的高度标题,并且它没有正确滚动到顶部。

1 个答案:

答案 0 :(得分:1)

您可以使用.is()检查某个元素是否也与其他选择器匹配。例如,如果您的链接也与#topBanner a匹配,则返回true;如果是另一个链接,则返回false:

$(myLink).is('#topBanner a');

因此,在.click()功能中,您可以使用$(this).is('#topBanner a')进行此项检查。

您可以根据链接是否在animate中仅设置偏移量(不管是否为#topBanner,而不是在代码中使用相同的if (target.length) { // set 180 if link is in #topBanner, otherwise 0 var offset = $(this).is('#topBanner a') ? 180 : 0; $('html,body').animate({scrollTop: target.offset().top - offset}, 1500); return false; } 函数两次0或180)

{{1}}