添加活动类以平滑页面滚动单击AND手动滚动

时间:2014-08-07 14:44:07

标签: javascript jquery hyperlink

我有一个平滑的页面滚动脚本,但需要它在与当前视图中的页面部分对应的链接中添加一个“活动”类。我知道有很多类似的帖子,但它们都只在链接本身被点击时才起作用。我希望在点击时不仅应用/删除活动类,但是当您使用鼠标滚轮向下滚动页面时,它也应该使用该方法在链接之间切换。

http://jsfiddle.net/pixeloco/sewcs4cr/

$('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 - $('nav').height()
    }, 1000);
    return false;
  }
}

(这个链接产生了我想要的结果,但是当我调整它以满足我的需求时,活动类开始跳跃......加上有一些似乎被定义但从未使用的东西会混淆我的非js-saavy大脑比平常更多:http://jsfiddle.net/cse_tushar/Dxtyu/141/

1 个答案:

答案 0 :(得分:1)

好的找到了一个解决方案,以防万一其他人一直在寻找类似的东西我希望这会有所帮助:http://jsfiddle.net/pixeloco/L57z4ntb/

function checkSectionSelected(scrolledTo){
        var threshold = 30;
        var i;
        for (i = 0; i < sections.length; i++) {
            var section = $(sections[i]);
            var target = getTargetTop(section);
            if (scrolledTo > target - threshold && scrolledTo < target + threshold) {
                sections.removeClass("active");
                section.addClass("active");
            }
        };
    }
    checkSectionSelected($(window).scrollTop());
    $(window).scroll(function(e){
        checkSectionSelected($(window).scrollTop())
    });